一尘不染

具有反向外键过滤功能的Django Queryset

django

我有以下Django模型:

class Make:
   name = models.CharField(max_length=200)

class MakeContent:
   make = models.ForeignKey(Make)
   published = models.BooleanField()

我想知道是否有可能(无需直接编写SQL)生成一个查询集,其中包含所有Makes和每个人的相关MakeContents where published = True


阅读 470

收藏
2020-03-31

共2个答案

一尘不染

Django不支持select_related()反向外键查找的方法,因此,最好的方法是在不离开Python的情况下进行两个数据库查询。第一个是获取Makes包含MakeContentswhere的所有内容published = True,第二个是获取所有MakeContentswhere的内容published = True。然后,你必须遍历并按需要排列数据。

2020-03-31
一尘不染

是的,我想你想要

make = Make.objects.get(pk=1)
make.make_content_set.filter(published=True)

或许

make_ids = MakeContent.objects.filter(published=True).values_list('make_id', flat=True)
makes = Make.objects.filter(id__in=make_ids)
2020-03-31