我正在尝试使用Django和mongoengine来制作一个API。
到目前为止,我可以获取对象并删除它们。但是当我想发布一些数据的时候。假设学生+课程给出了一个错误:
type object 'Course' has no attribute 'objects'
模型en ..
#Model.py
class Course(EmbeddedDocument):
course_name = StringField(max_length=200)
course_fee = StringField(max_length=200)
class Student(Document):
student_name = StringField(max_length=200)
student_contactperson = StringField(max_length=200)
student_adress = StringField(max_length=200)
courses = ListField(EmbeddedDocumentField(Course))
#Serializers.py
class CourseSerializer(EmbeddedDocumentSerializer):
class Meta:
model = Course
fields = ('course_name','course_fee')
class StudentSerializer(DocumentSerializer):
courses = CourseSerializer(many=True)
class Meta:
model = Student
fields = ('student_name','student_contactperson','student_adress','courses')
depth = 2
def create(self, validated_data):
course_data = validated_data.pop('courses')
student = Student.objects.create(**validated_data)
Course.objects.create(student=student, **course_data)
return student
#Views.py
class StudentViewSet(meviewsets.ModelViewSet):
lookup_field = 'name'
queryset = Student.objects.all().order_by('-date_joined')
serializer_class = StudentSerializer
发布于 2019-05-17 03:14:10
Document
表示MongoDB文档(即集合中的记录),文档类绑定到特定的集合。EmbeddedDocument表示嵌套在文档中的结构。
因此,按照设计,除非将EmbeddedDocument嵌入到文档中,否则它不会附加到任何集合。
这意味着您不能查询或保存EmbeddedDocument类,您需要查询/保存父文档。
Document.objects
是查询集合的入口点,它只存在于文档类中。您正在调用Course.objects.create
,但Course
是一个EmbeddedDocument。
我认为您需要将代码更改为以下类StudentSerializer(DocumentSerializer):...
def create(self, validated_data):
course_data = validated_data.pop('courses')
course = Course(**course_data) # assuming course_data is {course_name: ..., course_fee: ...}
return Student.objects.create(courses=[course], **validated_data)
https://stackoverflow.com/questions/56163530
复制相似问题