【问题标题】:Django Rest Framework- Writable nested serializers errorDjango Rest Framework-可写嵌套序列化程序错误
【发布时间】:2015-02-13 16:22:19
【问题描述】:

我正在尝试创建一个测验应用程序,我是 dajango 和休息的初学者,我正在尝试创建一个序列化程序来创建带有选项的新问题,我也不太了解可写嵌套序列化程序的工作原理,如果有人可以给出一个可行的例子

models.py:

class Question(models.Model):
    quiz = models.ForeignKey(Quiz, related_name="question")
    question = models.CharField(max_length=200)

    def __unicode__(self):
        return self.question 

class Choice(models.Model):
    question = models.ForeignKey(Question, related_name="choice")
    choice = models.CharField(max_length=200)
    correct_answer = models.BooleanField(default=False)

    def __unicode__(self):
        return self.choice

serializers.py:

class createChoiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Choice
        fields = ('choice','correct_answer',)

class createQuestionSerializer(serializers.ModelSerializer):
    choices = createChoiceSerializer()
    class Meta:
        model = Question

    def create(self, validated_data):
        choices_data = validated_data.pop('choices')
        question = Choice.objects.create(**validated_data)
        for choice in choices_data:
            try:
                choice = Choice.objects.get(name=choice["name"])
            except Choice.DoesNotExist:
                choice = Choice.objects.create(**choice)
            question.choices.add(choice)
        return question

当我写下问题和选择时,我得到了一个错误: /questions/create 处的 ValueError

无法分配“u”what's your name“”:“Choice.question”必须是“Question”实例。

【问题讨论】:

  • Choice.objects.create(**validated_data) 你为什么把这个分配给问题?应该是 Question.objects.create(**validated_data) 吗?
  • @brsbilgic 任何变量!你认为这是问题所在吗?

标签: python django


【解决方案1】:

问题 = Choice.objects.create(**validated_data)

question 是一个Choice 实例,question.choices.add(choice) 基本上将Choice 添加到Choice 实例。

你可以试试Question.objects.create(**validated_data)。我不确定这是否有效,但至少解决了您现在遇到的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2015-06-18
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多