2013-06-10 2 views
4

docs에 따르면 쿼리 세트는 list()가 호출 될 때 평가됩니다.목록/튜플에 쿼리를 추가하지 않고 쿼리 세트를 추가합니다.

모델 개체 대신 쿼리/집합에 목록/튜플을 추가하는 방법이 있습니까? list()는리스트/튜플에 대한 모든 연산을 호출합니까?

예컨대 :

이 더 이상 true 또는 아마도 당신은 요소의 유형을 확인했던 방법은 실수 평가를 트리거 한 중 하나입니다
foo= Foo.objects.all() 
bar = Bar.objects.filter(enabled=True) 

my_list = [] 

my_list.append(foo) <-- evaluates 
my_list.extend(foo) <-- evaluates 

my_tuple =() 
my_tuple = my_tuple + (foo,) <-- evaluates 

# so I'm getting 
[<Foo: ModelDescription>,<Foo: ModelDescription>,<Bar: ModelDescription>] 

#but I want 
[<Queryset: Foo>, <Queryset:Bar>] 
+1

첫 번째와 세 번째 질문이 확실한가요? 그들은해서는 안됩니다. –

+1

그들은 능동적 인 인터프리터 쉘에서만 평가한다고 생각합니다. – Jingo

+0

예, 그들은 그랬습니다. 뷰 함수에 코드를 넣으면 문제가 해결되었습니다. – Jannis

답변

0

.

요약하면 append() 또는 my_tuple = my_tuple + (foo,)을 사용할 수 있습니다. 그냥 인쇄하려고하면 QuerySet을 평가하고 내용을 출력하지만이 모음을 반복하면 실제 QuerySet으로 작업 할 수 있습니다.

>>> a = Author.objects.filter() 
>>> b = Book.objects.filter() 
>>> type(a), type(b) 
(<class 'django.db.models.query.QuerySet'>, <class 'django.db.models.query.QuerySet'>) 
>>> l = [] 
>>> l.append(a) 
>>> l.append(b) 
>>> type(l[0]), type(l[1]) 
(<class 'django.db.models.query.QuerySet'>, <class 'django.db.models.query.QuerySet'>) 
>>> for q in l: 
... print type(q) 
... 
<class 'django.db.models.query.QuerySet'> 
<class 'django.db.models.query.QuerySet'> 
>>> my_tuple =() 
>>> my_tuple = my_tuple + (a,) 
>>> type(my_tuple[0]) 
<class 'django.db.models.query.QuerySet'> 
>>> len(l) 
2 
>>> len(my_tuple) 
1 
>>> print l 
[[<Author: Author object>, '...(remaining elements truncated)...'], [<Book: Book object>,]] 
>>> len(my_tuple) 
1 
>>> print my_tuple 
([<Author: Author object>, '...(remaining elements truncated)...'],) 
>>> len(my_tuple) 
1 
>>> 
관련 문제