2014-01-25 2 views
0

그래서 this question에 대한 질문이 있지만 대답이 없습니다. 별개의 쿼리 세트를 Django에서 구현하지 않았다는 것을 알고 있지만 질문은 다음과 같습니다. 이 작업을 수행하는 다른 방법은 무엇입니까?Django 해결되지 않음

코드 예제 : 은 무엇인가 :

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/query.pyc in __iter__(self) 
    94    - Responsible for turning the rows into model objects. 
    95   """ 
---> 96   self._fetch_all() 
    97   return iter(self._result_cache) 
    98 

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/query.pyc in _fetch_all(self) 
    852  def _fetch_all(self): 
    853   if self._result_cache is None: 
--> 854    self._result_cache = list(self.iterator()) 
    855   if self._prefetch_related_lookups and not self._prefetch_done: 
    856    self._prefetch_related_objects() 

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/query.pyc in iterator(self) 
    218    klass_info = get_klass_info(model, max_depth=max_depth, 
    219           requested=requested, only_load=only_load) 
--> 220   for row in compiler.results_iter(): 
    221    if fill_cache: 
    222     obj, _ = get_cached_row(row, index_start, db, klass_info, 

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/sql/compiler.pyc in results_iter(self) 
    708   fields = None 
    709   has_aggregate_select = bool(self.query.aggregate_select) 
--> 710   for rows in self.execute_sql(MULTI): 
    711    for row in rows: 
    712     if has_aggregate_select: 

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/sql/compiler.pyc in execute_sql(self, result_type) 
    769   """ 
    770   try: 
--> 771    sql, params = self.as_sql() 
    772    if not sql: 
    773     raise EmptyResultSet 

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/sql/compiler.pyc in as_sql(self, with_limits, with_col_aliases) 
    119    if distinct_fields: 
    120     raise NotImplementedError(
--> 121      "annotate() + distinct(fields) not implemented.") 
    122    if not ordering: 
    123     ordering = self.connection.ops.force_no_ordering() 

NotImplementedError: annotate() + distinct(fields) not implemented. 

그래서 다시, 질문은 : 장고 '가 구현되지 않습니다 "때문에

qs1 = Example.objects.filter(...).annotate(...) 
qs2 = Example.objects.filter(...).distinct(...) 
from itertools import chain 
answer = chain(qs1,qs2) 

그러나 이것은 다음과 같은 오류를 반환합니다 이 쿼리 세트를 연결하는 방법은?

답변

2

나는 약간의 시간을 되돌려야했기 때문에 iter 도구로하는 것이 옳다면, 그것을 목록에 던져야 할 것입니다. 여기

from itertools import chain 

cars = Cars.objects.all() 
trucks = Truck.objects.all() 
all_vechiles = chain(list(cars), list(trucks)) 

소스 : http://mushfiq.me/2013/08/04/django-merging-to-queryset-using-itertools/

+0

난 여전히 당신의 예제 내 오류의 원인이 무엇있는 독특한이나 주석을 사용하지 않는 점에 유의 ... 같은 오류가 발생합니다. 내 distict (...)를 꺼내면'list'를 사용하지 않고 작동하지만 별개의 호출이 필요합니다 –

+0

장고 쿼리가 게으르기 때문에 이상하게 보일 수 있습니다. 쿼리를 강요하려고 시도 할 수도 있습니다. 평가 후 체인 – Anup

+0

작품! 답을 수정하면 받아 들일 것입니다. (전체 체인이 아닌'cars'와'trucks' 둘레에'list' 함수를 넣으십시오) –

관련 문제