繁体   English   中英

Django没有实现解决方法

[英]Django Not implemented work around

所以这个问题之前已被问过,但没有答案。 我知道在Django中没有实现加入带有明确查询的带注释的查询集,但问题是: 这样做的另一种方法是什么?

代码示例:

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

但是这会返回以下错误,因为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.

因此,问题是: 实现链接这些查询集的方法什么?

我不得不在一段时间后做这样的事情,所以你用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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM