我正在尝试将django与蒙古恩一起使用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
a Document
代表mongodb文档(即集合中的记录(,文档类别与特定集合绑定。嵌入式图表表示嵌套在文档中的结构。
因此,通过设计,除非将其嵌入在文档中,否则任何嵌入式文档都不会附加到任何集合。
。这意味着您无法查询或保存嵌入式媒体类,您需要查询/保存父文档。
Document.objects
是查询集合的入口点,仅存在于文档类中。您正在调用Course.objects.create
,但Course
是一个嵌入式。
我相信您需要将代码更改为以下班级学生(文档启动器(: ...
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)