繁体   English   中英

如何在python Django Rest Framework中的序列化器中获取其余请求?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM