我正在编写一个调查应用程序。我有一个模型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创建新的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',)
有很多问题。首先,每个答案都需要答案集和问题(答案集是明确定义的-我只是创建了一个,问题是通过调查和答案列表中的位置来定义的[问题是有序的])。 第二个问题是我正在使用ListSerializer(即many=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
方法相关问题 更多 >
编程相关推荐