使用可写嵌套Serializ创建Django Rest Create

2024-10-03 23:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用可写嵌套序列化程序在Django Rest框架中执行create。在

使用下面的代码,我可以创建一个ScriptQuestion,但不能在其中添加RecordedInterview。Django说OrderedDict不是。在

我做错什么了?在

提前谢谢

#models.py

class ScriptQuestion(models.Model):
    interview = models.ManyToManyField(RecordedInterview)
    ...

class RecordedInterview(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    ...

序列化程序

^{pr2}$

这是我的观点

#views.py 

class CreateQuestion(generics.CreateAPIView):
    queryset = ScriptQuestion.objects.all()
    serializer_class = QuestionDetailSerializer

还有json

{
    "title": "Question Test Json",
    "prep_time": "1",
    "answer_time":"1",
    "interview": [
           {
                "id": "a450aeb0-8446-47b0-95bd-5accbb8b4afa"
            }
     ]
}

如果手动执行,则可以将RecordedInterface添加到ScriptQuestion中:

#serializers.py 

def create(self, validated_data):
    interview_data = validated_data.pop('interview')
    question = ScriptQuestion.objects.create(**validated_data)
    item = 'a450aeb0-8446-47b0-95bd-5accbb8b4afa'
    question.interview.add(item)
    return question

Tags: djangopy程序iddatamodel序列化models
2条回答

因为名声不好,我不能加评论。所以加起来作为答案。我觉得你应该用序列化程序。ModelSerializer'而不是'序列化程序.HyperLinkedModelSerializer'

哦,我能来的。在

对于将来的人,只需添加“id=序列化程序.CharField序列化程序中的“()”

class InterviewTitleSerializer(serializers.ModelSerializer):
    id = serializers.CharField()

    class Meta:
        model = RecordedInterview
        fields = ('id', 'title')
        extra_kwargs = {'title': { 'read_only': True }}

相关问题 更多 >