【发布时间】:2019-11-23 01:26:02
【问题描述】:
我使用 Django-rest-framework 编写投票应用程序项目。它有两种模型:问题和嵌套答案。我想根据要求更新问题序列化程序的答案,例如:
{
"question":"question",
"answers": [{"answer":"first updated answer"}, {"answer":"second update answer"}]
}
我怎样才能正确地做到这一点?我尝试这样做,但是我删除了每个请求中的答案并创建了新答案,因为每次都会更改他们的 ID。
serializer.py
class QuestionSerializer(serializers.ModelSerializer):
user = serializers.StringRelatedField()
answers = AnswerSerializer(many=True)
class Meta(object):
model = Question
fields = ('id', 'question', 'answers', 'total_votes', 'user')
read_only_fields = ('id', 'total_votes', )
def update(self, instance, validated_data):
instance.question = validated_data.get('question', instance.question)
instance.save()
question = Question.objects.get(id=instance.id)
Answer.objects.filter(question=question).delete()
answers_data = validated_data.pop('answers')
for answer_data in answers_data:
Answer.objects.create(question=question, **answer_data)
return instance
models.py
class Question(models.Model):
question = models.CharField(verbose_name='Question', max_length=255)
total_votes = models.IntegerField(verbose_name='Total Votes', default=0)
user = models.ForeignKey(User, verbose_name='Owner', on_delete=models.CASCADE)
class Answer(models.Model):
question = models.ForeignKey(Question, verbose_name='Question', related_name='answers',
on_delete=models.CASCADE)
answer = models.CharField(verbose_name='Answer', blank=True, max_length=255)
votes_count = models.IntegerField(verbose_name='Count of Votes', default=0)
【问题讨论】:
标签: django python-3.x django-rest-framework django-serializer