【问题标题】:How do i use annotate to group the child models by the parent models?如何使用注释按父模型对子模型进行分组?
【发布时间】:2020-02-07 14:08:01
【问题描述】:

我有 3 个模型。同行评审答案和声明。同行评审有很多答案,每个答案都属于一个陈述(或问题,如果你愿意的话)

我想要的是从根据他们的陈述分组的所有 PeerReviews 中获得所有答案。所以最终结果应该是一个字典,其中键是语句对象,值是该特定语句的所有答案的列表。如果你把它打印出来,它看起来像这样:

{Statement A : [answer, answer, answer], Statement B : [answer,answer,answer], Statement C : etc etc}

我知道对于 group by 查询,我应该使用 annotate() 方法,但我找到的所有示例都是关于计数和求和操作的。我如何使用注释来获取上述字典?

谢谢

【问题讨论】:

    标签: python django django-annotate


    【解决方案1】:

    如果我明白你想要什么,你需要使用反向外键关系。

    statements = Statement.objects.prefetch_related('answer_set__peer_review')
    

    如果你需要一本字典,那么就可以了:

    mapping = {s: list(s.answer_set.all()) for s in statements}
    

    【讨论】:

    • 这是否也将所有答案按其链接语句分组?
    • 是的,因为这是获取所有语句,然后您访问该语句的答案。
    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2011-05-05
    相关资源
    最近更新 更多