我有两个模型,Survey
和Question
。一个Survey
可以包含多个Question
。我想创建一个ListAPIView
以返回与Surveys
关联的Questions
列表。所以返回的json看起来像这样:
[{
'name': 'Survey 1',
'questions':[{'question': 'q1'}, {'question': 'q2'}]
},
{
'name': 'Survey 2',
'questions':[{'question': 'q3'}, {'question': 'q4'}]
},
...
]
我想使用DRF软件包随附的
CursorPagination
。所以这是我尝试过的:class SurveyList(ListAPIView):
pagination_class = CursorPagination
def get_queryset(self):
# How can I construct a queryset that matches the JSON structure above?
由于ListAPIView的
get_queryset
期望返回查询集。我需要手动创建上述的JSON结构并将其放入查询集中。所以我的问题是如何手动创建查询集?
更新:这是模型定义
class Survey(models.Model):
name = models.TextField()
class Question(models.Model):
question = models.TextField()
survey = models.ForeignKey(Survey)
最佳答案
您需要为模型创建自定义序列化器:
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ('question',)
class SurveySerializer(serializers.ModelSerializer):
questions = QuestionSerializer(source="question_set", many=True)
class Meta:
model = Survey
fields = ('name', 'questions')
depth = 1
您认为:
class SurveyList(ListAPIView):
queryset = Survey.objects.all()
serializer_class = SurveySerializer
如果您的
ForeignKey
模型中有Question
到Survey
。如果您未将question_set
替换为您的字段名称。在Django Rest Framework文档中签出serializers section。
关于python - Django Rest Framework如何自定义ListAPIView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34134866/