Django 从多对一关系序列化嵌套查询集
我有一个调查应用程序,里面有调查、问题和问题的选择。每个问题都有其所属调查的外键,每个选项都有其所属问题的外键。 多项选择题的清除模型代码如下所示Django 从多对一关系序列化嵌套查询集,django,postgresql,serialization,orm,django-queryset,Django,Postgresql,Serialization,Orm,Django Queryset,我有一个调查应用程序,里面有调查、问题和问题的选择。每个问题都有其所属调查的外键,每个选项都有其所属问题的外键。 多项选择题的清除模型代码如下所示 class Survey(models.Model): # survey attributes, not needed in the query for this question class Question(models.Model): survey = models.ForeignKey(Survey) prompt
class Survey(models.Model):
# survey attributes, not needed in the query for this question
class Question(models.Model):
survey = models.ForeignKey(Survey)
prompt = models.TextField()
class Choice(models.Model):
question = models.ForeignKey(Question)
letter = models.CharField(max_length=1)
text = models.TextField()
is_correct = models.BooleanField(default=False)
为了获得调查中的所有问题,我可以选择我需要的所有数据,并以此作为反向关系
Survey.objects.get(pk=1).question_set\
.select_related('choice__text', 'choice__letter')\
.values('prompt', 'choice__text', 'choice__letter')
它会像预期的那样回来
[{
prompt: str,
choice__text: str,
choice__letter: char,
},]
…但这将在每一行重复提示,理想情况下,格式将更接近
[{
prompt: str,
choice_set: [{
letter: char,
text: str,
},]
},]
我以前解决过一个类似的问题,将其放入panda数据框中,并在序列化之前对数据进行分组,但我只能假设django的创建者已经找到了一种方法来实现这一点
有没有任何方法可以轻松地嵌套这些查询,而不必遍历每个问题模型并查询其选择 使用django rest框架中的序列化程序应该可以做到这一点。序列化程序可以像上“嵌套关系”一节中的示例那样嵌套