如何将数据张贴到MongoEngine Rest嵌入文档中



我正在尝试将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)

最新更新