我遇到了困扰我的Django ORM问题。我有一组由外键链接的模型,但要求有点奇怪。我需要按照他们的关系列出项目。这很难解释,所以我试图在下面描述这个,给出:
工作
奖
AwardCategory
我需要列出工作项,以便按奖项类别列出。期望的输出将是:
工作实例A
工作实例A(与上述实例相同,但由不同的award__category列出)
工作实例B
基本上我想列出奖项类别的所有作品。我可以让这部分工作,但我的解决方案是肮脏和粗暴的。我想知道是否有更好的方法。我考虑使用ManyToMany和through属性,但我不确定我是否正确使用它。
答案 0 :(得分: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)
答案 1 :(得分: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循环中执行此操作似乎是错误的!