Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
Django models django:SQL联合或与queryset连接:与annotate一起使用时工作不正常_Django Models_Django Queryset_Django Aggregation - Fatal编程技术网

Django models django:SQL联合或与queryset连接:与annotate一起使用时工作不正常

Django models django:SQL联合或与queryset连接:与annotate一起使用时工作不正常,django-models,django-queryset,django-aggregation,Django Models,Django Queryset,Django Aggregation,我有下面两个查询集books1和books2。在这两个方面,我使用annotate添加另一列,books1的常量为10,books2的常量为30。问题是在连接查询集之后,最终的集合显示注释值=10,即使对于books2也是如此 author1 = Author.objects.get(pk=1) books1 = author1.books_set.annotate(sample_var=Value(10)) author2 = Author.objects.get(pk=2) books

我有下面两个查询集books1和books2。在这两个方面,我使用annotate添加另一列,books1的常量为10,books2的常量为30。问题是在连接查询集之后,最终的集合显示注释值=10,即使对于books2也是如此

author1 = Author.objects.get(pk=1)

books1 = author1.books_set.annotate(sample_var=Value(10))

author2 = Author.objects.get(pk=2)

books2 = author2.books_set.annotate(sample_var=Value(30))

combine = books1 | books2
我看到:

name                  author id       sample_var
name1 (from books1)       1                10
..                        1                10
..                        1                10
..                        1                10
name2 (from books2)       2                10 (instead of 30) 
..                        2                10 (instead of 30) 
..                        2                10 (instead of 30) 
..                        2                10 (instead of 30) 
原因是,用于联合收割机的sql如下所示。我在尝试访问组合[0]时收到此消息。名称。它负责WHERE部分,但不负责注释部分。它使用10作为组合查询集的“sample_var”,这是不对的,这就是为什么上表中都显示10的原因

SELECT "books_books"."name", "books_books"."author_id", 10 AS "sample_var"
FROM "books_books" 
WHERE ("books_books"."author_id" = 1 OR "books_books"."author_id" = 2)
我认为,如果要正确地进行联合,sql应该:

SELECT "books_books"."name", "books_books"."author_id", 10 AS "sample_var"
FROM "books_books" 
WHERE ("books_books"."author_id" = 1)
union all
SELECT "books_books"."name", "books_books"."author_id", 30 AS "sample_var"
FROM "books_books" 
WHERE ("books_books"."author_id" = 2)
在Django 1.11中,您可以执行以下操作:

all_books = books1.union(books2, all=True)