我可能有一种显而易见的方法可以解决这个问题。
我有这样的模特:
class Speaker(models.Model):
name = models.CharField(max_length=50)
class Talk(models.Model):
title = models.CharField(max_length=50)
speaker = models.ForeignKey(Speaker)
如何优雅地列出所有发言的发言人名单?
目前我正在做一些可怕的事情,获取所有会谈的列表并循环遍历它们,因为我看不到使用Django的ORM这么简单的方法。
答案 0 :(得分:3)
Speaker.objects.exclude(talk=None)
或
Speaker.objects.filter(talk__isnull=False)
修改强>:
查看底层SQL(通过在表达式的末尾添加.query.as_sql()
),似乎后一种形式显着提高效率。前者完成了一个完全不必要的子查询。
我怀疑这是一个错误,因为第一种形式是在版本1.0之前发生的大量查询集重构中引入的,并且应该是首选形式。