【问题标题】:Serializing nested querysets from many-to-one relationships从多对一关系序列化嵌套查询集
【发布时间】: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


    【解决方案1】:

    使用 django-rest-framework 中的序列化程序应该可以解决问题。序列化器可以像http://www.tomchristie.com/rest-framework-2-docs/api-guide/relations上的“嵌套关系”部分中的示例一样嵌套

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2017-07-15
      • 2020-10-31
      • 2015-12-06
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多