FieldError: Невозможно преобразовать ключевое слово 'get_str' в поле при использовании метода @property в values_list() в QuerySet
У меня есть модель с именем Invitation
, где я создал метод свойства, который возвращает значение, возвращаемое методом __str__()
, как показано ниже:
class Invitation(models.Model):
@property
def get_str(self):
return self.__str__()
Теперь я пытаюсь использовать этот метод свойства в методе QuerySet values_list()
следующим образом:
Invitation.objects.values_list("pk", "get_str")
Но я получаю следующую ошибку:
Cannot resolve keyword 'get_str' into field. Choices are: accepted_at, created_at, created_by, created_by_id, expiration_date, id, invited_to, invitee_first_name, invitee_last_name, is_canceled, secret, sent_to
Полный отслеживание ошибки:
Traceback Switch to copy-and-paste view
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/sql/query.py, line 2107, in add_fields
join_info = self.setup_joins( …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/sql/query.py, line 1773, in setup_joins
path, final_field, targets, rest = self.names_to_path( …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/sql/query.py, line 1677, in names_to_path
raise FieldError( …
Local vars
During handling of the above exception (Cannot resolve keyword 'get_str' into field. Choices are: accepted_at, created_at, created_by, created_by_id, expiration_date, id, invited_to, invitee_first_name, invitee_last_name, is_canceled, secret, sent_to), another exception occurred:
/app/.heroku/python/lib/python3.10/site-packages/django/core/handlers/exception.py, line 55, in inner
response = get_response(request) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/core/handlers/base.py, line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/views/generic/base.py, line 84, in view
return self.dispatch(request, *args, **kwargs) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/contrib/auth/mixins.py, line 73, in dispatch
return super().dispatch(request, *args, **kwargs) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/views/generic/base.py, line 119, in dispatch
return handler(request, *args, **kwargs) …
Local vars
/app/apps/accounts/views.py, line 295, in get
invites = Invitation.objects.get_invites_to_cancel(user) …
Local vars
/app/apps/accounts/models.py, line 551, in get_invites_to_cancel
values_list("pk", "get_str") …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/query.py, line 980, in values_list
clone = self._values(*_fields, **expressions) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/query.py, line 943, in _values
clone.query.set_values(fields) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/sql/query.py, line 2425, in set_values
self.add_fields(field_names, True) …
Local vars
/app/.heroku/python/lib/python3.10/site-packages/django/db/models/sql/query.py, line 2140, in add_fields
raise FieldError( …
Local vars
Что я делаю неправильно? Как правильно использовать метод свойств? Любая помощь будет принята с благодарностью.
Вы можете аннотировать поле к вашему qs, содержащее все необходимые поля, а затем вызвать values_list на этом поле
qs = Invitation.objects.annotate(
str=Concat(F('name'), Value(' - '), F('id'), output_field=models.CharField())
).values_list('pk', 'str')
Результатом является:
(14, 'zeta - 14')