Python 使用向后关系时的Django情况

Python 使用向后关系时的Django情况,python,python-3.x,django,Python,Python 3.x,Django,我想注释“状态” 我需要: status=“Not Processed”如果至少一个反向相关forlistproduct具有status==ListProduct.status.Not_Processed status=“defect”如果至少有一个反向相关的forlistproduct具有状态==ListProduct.status.defect,并且没有一个具有状态==ListProduct.status.NOT_PROCESSED status=“Completed”如果向后相关forli

我想注释“状态”

我需要:

status=“Not Processed”
如果至少一个反向相关forlistproduct具有
status==ListProduct.status.Not_Processed

status=“defect”
如果至少有一个反向相关的forlistproduct具有
状态==ListProduct.status.defect,并且没有一个具有
状态==ListProduct.status.NOT_PROCESSED

status=“Completed”
如果向后相关forlistproduct中至少有一个具有
status==ListProduct.status.Completed
且没有一个具有
status==ListProduct.status.NOT\u处理

我试过这个密码

def annotate_status(self):
    return self.annotate(status=Case(
        When(
            forlistproduct_set__status=ListProduct.Status.NOT_PROCESSED,
            then=Value("Not Processed")
        ),
        When(
            Q(forlistproduct_set__status=ListProduct.Status.DEFICIT) &
            ~Q(forlistproduct_set__status=ListProduct.Status.NOT_PROCESSED),
            then=Value("Deficit")
        ),
        When(
            Q(forlistproduct_set__status=ListProduct.Status.COMPLETED) &
            ~Q(forlistproduct_set__status=ListProduct.Status.DEFICIT) &
            ~Q(forlistproduct_set__status=ListProduct.Status.NOT_PROCESSED),
            then=Value("Completed")
        ), output_field=CharField()
    ))
但它在下面提出了一个例外

Traceback (most recent call last):
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/production_api/views.py", line 74, in retrieve
    return super().retrieve(self, request, *args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/mixins.py", line 54, in retrieve
    instance = self.get_object()
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/generics.py", line 96, in get_object
    obj = get_object_or_404(queryset, **filter_kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/rest_framework/generics.py", line 19, in get_object_or_404
    return _get_object_or_404(queryset, *filter_args, **filter_kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/django/shortcuts.py", line 76, in get_object_or_404
    return queryset.get(*args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/nplusone/core/signals.py", line 23, in wrapped
    ret = func(*args, **kwargs)
  File "/Users/nizhdanchik/PycharmProjects/UpworkProjects/SlopehelperERP/backend/venv/lib/python3.9/site-packages/django/db/models/query.py", line 433, in get
    raise self.model.MultipleObjectsReturned(
production_api.models.List.MultipleObjectsReturned: get() returned more than one List -- it returned 6!
我可以用反向关系来做这件事吗