首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Mongoengine REST将数据发布到嵌入式文档

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

Stack Overflow用户
提问于 2019-05-16 15:53:00
回答 1查看 614关注 0票数 1

我正在尝试使用Django和mongoengine来制作一个API。

到目前为止,我可以获取对象并删除它们。但是当我想发布一些数据的时候。假设学生+课程给出了一个错误:

代码语言:javascript
复制
type object 'Course' has no attribute 'objects'

模型en ..

代码语言:javascript
复制
#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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 03:14:10

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

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

这意味着您不能查询或保存EmbeddedDocument类,您需要查询/保存父文档。

Document.objects是查询集合的入口点,它只存在于文档类中。您正在调用Course.objects.create,但Course是一个EmbeddedDocument。

我认为您需要将代码更改为以下类StudentSerializer(DocumentSerializer):...

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56163530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档