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')
Вернуться на верх