Django注释条件表达式无效查找

时间:2018-10-15 16:54:37

标签: django django-views django-orm

我尝试创建一个在django_filters中使用的查询集。

service_list = table1.objects.annotate(
          Total=Sum(
              Case(When(table1fk__table2fk__table3fk__table4field='XX', then=Table2.field),output_field=IntegerField())
          )
)

我得到:

System check identified no issues (0 silenced).
October 15, 2018 - 16:24:15
Django version 2.1.2, using settings 'cobalt.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
Internal Server Error: /service/service
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/code/service/views.py", line 33, in ServiceEnseignant
    Case(When(composition__type__cmtdtp__code='CM', then=Composition.NBHeures),output_field=IntegerField())
  File "/usr/local/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 1008, in annotate
    clone.query.add_annotation(annotation, alias, is_summary=False)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 988, in add_annotation
    summarize=is_summary)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/aggregates.py", line 39, in resolve_expression
    c = super().resolve_expression(query, allow_joins, reuse, summarize)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/expressions.py", line 597, in resolve_expression
    c.source_expressions[pos] = arg.resolve_expression(query, allow_joins, reuse, summarize, for_save)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/expressions.py", line 921, in resolve_expression
    c.cases[pos] = case.resolve_expression(query, allow_joins, reuse, summarize, for_save)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/expressions.py", line 856, in resolve_expression
    c.condition = c.condition.resolve_expression(query, allow_joins, reuse, summarize, False)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/query_utils.py", line 95, in resolve_expression
    clause, joins = query._add_q(self, reuse, allow_joins=allow_joins, split_subq=False)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1287, in _add_q
    split_subq=split_subq,
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1217, in build_filter
    raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0]))
django.core.exceptions.FieldError: Related Field got invalid lookup: table3fk

我首先尝试在table1上定义@property来进行总和,这很有效,但是我需要对不同的XX总和求和以在视图中呈现小计,然后转到注释。

我希望它足够清楚。

0 个答案:

没有答案