【发布时间】:2017-06-23 22:47:42
【问题描述】:
我有一个调查应用程序,其中有调查、问题和问题选择。每个问题都有一个属于调查的外键,每个选项都有一个属于该问题的外键。 多选题的清理模型代码如下所示。
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 postgresql serialization orm django-queryset