首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django关系查询关系

Django关系查询关系
EN

Stack Overflow用户
提问于 2012-09-13 19:20:09
回答 2查看 106关注 0票数 0

我被一个困扰我的Django ORM问题困住了。我有一套模型连接外键,但要求有点奇怪。我需要按他们亲戚的关系列出物品。这一点很难解释,所以我试着在下面描述一下,考虑到:

工作

  • ManyToMany(奖)

授奖

  • ForeignKey(AwardCategory)

AwardCategory

我需要列出工作项目,以便他们被列入奖励类别。预期产出将是:

工作实例A

  • 授予属于奖励类别A的实例A
  • 奖励实例C,属于奖励类别实例A
  • 奖励实例G,属于奖励类别实例A

工作实例A(与上面相同的实例,但由不同的award__category列出)

  • 奖励实例F,属于奖励实例B
  • 奖励实例R,属于奖励实例B
  • 奖励实例Z,属于奖励实例B

工作实例B

  • 奖励实例B,属于奖励类别实例A
  • 授予属于奖励类别A的实例A

本质上,我想按奖项类别列出所有作品。我可以让这部分发挥作用,但我的解决方案是肮脏和恶心的。我想知道是否有更好的方法。我考虑过使用ManyToMany和直通属性,但我不确定是否正确地使用了它。

EN

回答 2

Stack Overflow用户

发布于 2012-09-13 21:35:19

根据模型的字段和关系调整以下内容:

代码语言:javascript
复制
for w in Work.objects.all():
    print w
    for award in w.award_set.order_by(awardcategory):
         print "%s that belongs to %s" % (award,award.awardcategory)
票数 1
EN

Stack Overflow用户

发布于 2012-09-15 15:18:09

所以我想出了一个类似的结果,但感觉还是有点脏。

代码语言:javascript
复制
categories = AwardCategory.objects.all()
work = []
for cat in categories:
    work_in_cat = Work.objects.filter(awards__category=cat).distinct()
    for w in work_in_cat:
        work.append({
            'work': w,
            'category': cat,
            'awards': w.awards.filter(category=cat)
        })

这会产生我想要的结果,但是在for循环中这样做似乎是错误的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12413308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档