Django技术问询:如何从Organizer模型出发获取所有关联Event的组织者?
解决从Organizer模型查询关联Event的实例问题
先明确下你的场景:
已知Event模型定义如下:
class Event(HashidModel, TimeStampedModel): organizer = models.ForeignKey( "organizers.Organizer", on_delete=models.CASCADE, related_name="events" )需要从Organizer模型出发,获取所有拥有至少一个Event的Organizer对象,不能从Event模型发起查询,初始语句是
Organizer.objects.all()。
直接给你调整后的查询语句,这是最简洁高效的写法:
organizers_with_events = Organizer.objects.filter(events__exists=True)
为啥这么写?
events是你在Event模型里设置的related_name,它用来建立Organizer到Event的反向关联,所以可以直接在Organizer的查询里调用它__exists=True会让Django生成一个EXISTS子查询,去检查当前Organizer是否存在对应的Event记录,这种方式比用__isnull=False或者distinct()效率更高,而且不会返回重复的Organizer实例- 完全符合你“从Organizer模型发起查询”的要求,没有从Event那边开始
内容的提问来源于stack exchange,提问作者Joey Coder
相关产品推荐
相关产品推荐

