Python 如何使用Django';s ORM
我有一个Django模型,比如:Python 如何使用Django';s ORM,python,django,Python,Django,我有一个Django模型,比如: class Post(models.Model): name = models.CharField(max_length=10) class Topic(models.Model): name = models.CharField(max_length=10) class Annotator(models.Model): post = models.ForeignKey(Post, related_name='annotatio
class Post(models.Model):
name = models.CharField(max_length=10)
class Topic(models.Model):
name = models.CharField(max_length=10)
class Annotator(models.Model):
post = models.ForeignKey(Post, related_name='annotations')
topic = models.ForeignKey(Topic)
name = models.CharField(max_length=10)
如何查找没有与特定主题
和注释器名称
值关联的注释器记录的所有Post记录
如果没有主题
和名称
筛选条件,Django查询将如下所示:
qs = Post.objects.all()
qs = qs.annotate(annotations_count=Count('annotations'))
qs = qs.filter(annotations_count=0)
但我想做的是:
qs = Post.objects.all()
qs = qs.annotate(annotations_count=Count('annotations' where name='annotator1' and topic='topic1'))
qs = qs.filter(annotations_count=0)
这显然是不合法的
我目前正在使用.raw()
执行传统的左外连接
,因此我可以在WHERE
子句中执行此过滤,但这会阻止我重新使用使用Django ORM重写的大量代码和过滤器
如何将筛选条件添加到Django的.annotate()
方法中,或者以其他方式获得相同的结果
我正在使用Django 1.11
如何查找没有与特定主题和注释器名称值关联的注释器记录的所有Post记录
如果我理解你的问题,你正在寻找:
Post.objects.exclude(
annotator__topic='topic1',
annotator__name='annotator1'
)