Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django';s ORM_Python_Django - Fatal编程技术网

Python 如何使用Django';s ORM

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

我有一个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='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'
)