[英]How to get rest of the request in serializer in python django rest framework?
我正在编写一个调查应用程序。 我有AnsewerSet
模型,可以在一个Survey
中保存所有问题的答案。 这是我的models.py
一部分:
class AnswerSet(models.Model):
survey = models.ForeignKey('Survey', models.CASCADE, related_name='answer_sets')
class Answer(models.Model):
answer_set = models.ForeignKey(AnswerSet, models.CASCADE, related_name='answers')
question = models.ForeignKey(Question, models.CASCASE, related_name='answers')
text = models.TextField()
我想使用以下json POST
创建新的AnswerSet
:
{
survey_id: 1,
answers: [
{
text: 'I like that.'
},
{
text: 'Don't do that!'
}
]
}
这是针对具有两个文本问题的Survey
的答案。
我想创建一个串行即干-我不想实现自己的一切在.validate()
和.create()
方法。 到目前为止,我有这样的事情:
class AnswerSerializer(serializers.ModelSerializer):
class Meta:
model = Answer
fields = ('id', 'text', 'answer_set', 'question')
read_only_fields = ('id',)
class AnswerSetSerializer(serializers.ModelSerializer):
answers = AnswerSerializer(many=True)
class Meta:
model = AnswerSet
fields = ('id', 'survey', 'answers')
read_only_fields = ('id',)
有多个问题。 首先,每个答案都需要answer_set和问题(answer_set的定义很明确-我只是在创建一个答案,这个问题是由调查和在答案列表中的位置(问题已排序)定义的)。 第二个问题是我正在使用ListSerializer(that = True选项)进行创建,并且没有默认行为。 但这可以通过创建自定义ListSerializer来解决,但这对于这个最小的示例来说太复杂了。
所以我问如何修改AnswerSetSerializer和AnswerSerializer,这样我就不需要多次指定所有内容。 现在,每个请求都应如下所示:
{
survey_id: 1,
answers: [
{
text: 'I like that.'
answer_set: ?, // not yet created
question: 1 // first question of survey #1
},
{
text: 'Don't do that!'
answer_set: ?, // not yet created
question: 2 // second question of survey #1
}
]
}
我猜想,您将必须在视图中覆盖create(post)方法。 或者尝试使用序列化器的to_representation
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.