Django REST 框架 - 反向外键关系
Django REST framework - reverse ForeignKey relations
我围绕调查的前提构建了以下三个模型。
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,)
并且每个 SurveyQuestion 可以有多个答案 SurveyQuestionAnswer
:
class SurveyQuestionAnswer(models.Model):
...
survey_question = models.ForeignKey('surveys.SurveyQuestion', on_delete=models.CASCADE, null=True, blank=True,)
为简洁起见,请将我的 Survey 序列化程序想象得尽可能简单:
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')
仅获取 returns Survey
模型中的字段。理想情况下,我想对每个 SurveyQuestion
进行某种提取,并在其中嵌套 SurveyQuestionAnswers
如有任何专业提示和指点,我们将不胜感激。
我已经尝试了一些东西,但只会抛出错误。我很难知道这种类型的 API 关系在 DRF 中被称为什么,所以我找不到合适的示例指南来基于来自...
的相同原则
相关版本:
Django==2.2.1
djangorestframework==3.9.3
创建两个序列化程序,SurveyQuestionAnswerSerializer
和 SurveyQuestionSerializer
<b>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__'</b>
class SurveySerializer(serializers.ModelSerializer):
<b>survey_questions = SurveyQuestionSerializer(many=True, read_only=True, source="surveyquestion_set")</b>
class Meta:
model = Survey
fields = '__all__'
欲了解更多信息,
1. What is related_name
used for in Django?
2. DRF Serializer's source
argument
我围绕调查的前提构建了以下三个模型。
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,)
并且每个 SurveyQuestion 可以有多个答案 SurveyQuestionAnswer
:
class SurveyQuestionAnswer(models.Model):
...
survey_question = models.ForeignKey('surveys.SurveyQuestion', on_delete=models.CASCADE, null=True, blank=True,)
为简洁起见,请将我的 Survey 序列化程序想象得尽可能简单:
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')
仅获取 returns Survey
模型中的字段。理想情况下,我想对每个 SurveyQuestion
进行某种提取,并在其中嵌套 SurveyQuestionAnswers
如有任何专业提示和指点,我们将不胜感激。
我已经尝试了一些东西,但只会抛出错误。我很难知道这种类型的 API 关系在 DRF 中被称为什么,所以我找不到合适的示例指南来基于来自...
的相同原则相关版本:
Django==2.2.1
djangorestframework==3.9.3
创建两个序列化程序,SurveyQuestionAnswerSerializer
和 SurveyQuestionSerializer
<b>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__'</b>
class SurveySerializer(serializers.ModelSerializer):
<b>survey_questions = SurveyQuestionSerializer(many=True, read_only=True, source="surveyquestion_set")</b>
class Meta:
model = Survey
fields = '__all__'
欲了解更多信息,
1. What is related_name
used for in Django?
2. DRF Serializer's source
argument