如何使用Mongoengine REST将数据发布到嵌入式文档

沙比尔鞋底

我正在尝试将Django与mongoengine结合使用以制作API。

到目前为止,我可以获取对象并将其删除。但是当我想发布一些数据时。假设学生+课程出现错误:

type object 'Course' has no attribute 'objects'

型号和..

#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
挖泥船

ADocument代表MongoDB文档(即集合中的记录),Document类绑定到特定集合。EmbeddedDocument表示嵌套在Document中的结构。

因此,根据设计,除非将EmbeddedDocument嵌入到文档中,否则它不会附加到任何集合。

这意味着您无法查询或保存EmbeddedDocument类,而需要查询/保存父Document。

Document.objects是查询集合的入口点,它仅存在于Document类上。您正在呼叫,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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Mongoengine和Pyramid将数据保存到嵌入式文档的正确方法是什么?

在Django,Python中使用MongoEngine查询嵌入式文档

更新嵌入式Mongo文档-Mongoengine

如何通过公共嵌入式应用将 Shopify ScriptTag 发布到 Shopify 主题?

如何使用Mongoengine从MongoDB中删除文档?

如何使用flask mongoengine获取数据

如何将数据从ViewController传递到嵌入式View Controller

如何使用 mongoengine 查询为空的嵌入文档

MongoEngine:从嵌入式文档获取父文档

如何在mongoengine中仅包含选定的嵌入式文档?

使用Mongoengine通过正则表达式匹配嵌入式文档

如何使用angular8将嵌入式可编辑表格数据传递到服务中?

查询MongoEngine中的嵌入式文档列表

MongoEngine中嵌套的嵌入式文档的验证错误

如何对嵌入式文档进行排序?

如何删除重复的嵌入式文档

如何测试Mongoid的嵌入式文档?

何时使用嵌入式文档MongoDB

如何使用id mongodb在嵌入式文档数组中查找数据?

如何使用mongoDB和spring数据在嵌入式文档中创建id

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

如何使用mongoengine更新嵌入列表中的特定对象?

嵌入 angular 或使用嵌入式 URL REST API 后,如何从嵌入式 Power BI 报告/视觉对象中读取数据点值详细信息?

使用Python Eve Rest和Mongo过滤嵌入式文档

如何使用MongoEngine获取数据库中的集合列表?

如何将杂项文档转换为JSON,从而去除嵌入式文档ID,但保留主文档ID?

如何将嵌入式JSON拼凑成多个文档

使用mongoDB将嵌入式文档与父字段进行比较

JODConverter&LibreOffice:使用嵌入式图像将文档转换为html