我正在尝试创建一个测验应用程序,我是 dajango 和 rest 的初学者,我正在尝试创建一个序列化程序来创建带有选择的新问题,我也不太了解可写嵌套序列化程序的工作原理,如果有人能给出一个工作示例
模型.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
序列化程序.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”你叫什么名字“”:“Choice.question”必须是一个“问题”实例。
最佳答案
question = Choice.objects.create(**validated_data)
question
是一个 Choice
实例,question.choices.add(choice)
基本上将 Choice
添加到 Choice
实例。
您可以尝试 Question.objects.create(**validated_data)
。我不确定这是否有效,但至少解决了您现在遇到的错误。
关于python - Django Rest Framework-可写嵌套序列化器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504048/