2017-05-10 8 views
0

私は以下の2つのクエリセットbooks1とbooks2を持っています。両方私は注釈を使用してbooks1の場合は10、books2の場合は30の定数を持つ別の列を追加しています。問題は、私はクエリセットを連結した後、最終セットは、私が見るものさえbooks2django:SQL UNIONまたはquerysetと連結:注釈付きで使用すると正しく機能しない

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 

ため10 =注釈値を示しています

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] .nameにアクセスしようとすると、これが得られます。注釈部分ではなく、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) 
union all 
SELECT "books_books"."name", "books_books"."author_id", 30 AS "sample_var" 
FROM "books_books" 
WHERE ("books_books"."author_id" = 2) 

答えて

0

ジャンゴ1.11であなたがunionを行うことができ、そしてあなたのケースで:

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

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のあるべきだと思います

関連する問題