Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django REST框架-反向外键关系_Django_Django Rest Framework_Django 2.2 - Fatal编程技术网

Django REST框架-反向外键关系

Django REST框架-反向外键关系,django,django-rest-framework,django-2.2,Django,Django Rest Framework,Django 2.2,我围绕调查的前提构建了以下三个模型 class Survey(models.Model): ... id = models.UUIDField(_('Id'), primary_key=True, default=uuid.uuid4, editable=False,) name = models.CharField(_('Name'), max_length=120, blank=True, unique=True) slug = models.SlugField(_(

我围绕调查的前提构建了以下三个模型

class Survey(models.Model):
   ...
   id = models.UUIDField(_('Id'), primary_key=True, default=uuid.uuid4, editable=False,)
   name = models.CharField(_('Name'), max_length=120, blank=True, unique=True)
   slug = models.SlugField(_('Slug'), max_length=120, blank=True, unique=True)
   description = models.TextField(_('Description'), blank=True)
   ...
每个调查可以有多个问题
SurveyQuestion

class SurveyQuestion(models.Model):
    ...
    survey = models.ForeignKey('surveys.Survey', on_delete=models.CASCADE, null=True, blank=True,)
每个调查问题可以有多个答案
调查问题答案

class SurveyQuestionAnswer(models.Model):
    ...
    survey_question = models.ForeignKey('surveys.SurveyQuestion', on_delete=models.CASCADE, null=True, blank=True,)
为简洁起见,请将我的调查序列化程序想象为尽可能简单:

class SurveySerialializer(serializers.ModelSerializer):

    class Meta:
        model = Survey
        fields = ('__all__')

实际上,我所拥有的是:

class Survey(APIView):
    """
        Survey GET request endpoint: fetches Survey
    """
    permission_classes = User

    def get(self, request, survey_slug):

        survey = Survey.objects.get(slug=survey_slug)

        serializer = SurveySerializer(survey)

        response = get_hug_response(message='Organisation Active Survey Fetched Successfully', data=serializer.data)
        return Response(data=response, status=status.HTTP_200_OK)

但是,您可能都知道,相应的
surveys.get('slug')
fetch只返回
Survey
模型中的字段。理想情况下,我希望对每个
SurveyQuestion
进行某种提取,并在其中嵌套
surveyquestionsweals

任何专业的提示和建议都将不胜感激

我试过一些只会出错的方法。我很难知道这种类型的API关系在DRF中被调用,所以我找不到合适的示例指南来根据相同的原则

相关版本:

Django==2.2.1
djangorestframework==3.9.3

创建两个序列化程序,
SurveyQuestionAnswerSerializer
SurveyQuestionSerializer

class SurveyQuestionAnswerSerializer(serializers.ModelSerializer):
    class Meta:
        model = SurveyQuestionAnswer
        fields = '__all__'


class SurveyQuestionSerializer(serializers.ModelSerializer):
    survey_questionanswers = SurveyQuestionAnswerSerializer(many=True, read_only=True, source="surveyquestionanswer_set")

    class Meta:
        model = SurveyQuestion
        fields = '__all__'


class SurveySerializer(serializers.ModelSerializer):
    survey_questions = SurveyQuestionSerializer(many=True, read_only=True, source="surveyquestion_set")

    class Meta:
        model = Survey
        fields = '__all__'
class SurveyQuestionAnswerSerializer(serializers.ModelSerializer):
类元:
模型=调查问题答案
字段='\uuuu所有\uuuu'
类SurveyQuestionSerializer(serializers.ModelSerializer):
survey\u questionanswers=SurveyQuestionAnswerSerializer(many=True,read\u only=True,source=“surveyquestionanswer\u set”)
类元:
模型=调查问题
字段='\uuuu所有\uuuu'
类SurveySerializer(serializers.ModelSerializer):
survey\u questions=SurveyQuestionSerializer(many=True,read\u only=True,source=“surveyquestion\u set”)
类元:
模型=调查
字段='\uuuu all\uuuu'
有关更多信息,
1.

2.

太棒了,第一次工作。当你知道怎么做的时候就容易了!你能解释一下
集合在做什么吗?…我已经更新了一些相关链接,希望它能传达这样的想法:)嗯,
参数的链接没有指定
\u集合
的含义。我可以假设集合属于父模型实例吗?第一个引用传递了集合是什么