0

我被困在困扰我的 Django ORM 问题上。我有一组由外键链接的模型,但要求有点奇怪。我需要按它们的关系列出项目。这很难解释,所以我试图在下面描述这一点,给定:

工作

  • 多对多(获奖)

  • ForeignKey(AwardCategory)

奖项类别

我需要列出工作项目,以便按奖励类别列出。期望的输出是:

工作实例 A

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

工作实例A(与上述实例相同,但按不同的奖励类别列出)

  • 属于奖励类别实例 B 的奖励实例 F
  • 属于奖励类别实例 B 的奖励实例 R
  • 属于奖励类别实例 B 的奖励实例 Z

工作实例 B

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

本质上,我想按奖项类别列出所有作品。我可以让它部分工作,但我的解决方案是肮脏和粗暴的。我想知道是否有更好的方法。我考虑使用 ManyToMany 和 through 属性,但我不确定我是否正确使用它。

4

2 回答 2

1

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

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)
于 2012-09-13T21:35:19.083 回答
0

所以我想出了一个类似的结果,但它仍然感觉有点脏:(

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 循环中这样做似乎是错误的!

于 2012-09-15T15:18:09.653 回答