Можно ли ссылаться на свойство с помощью Django QuerySet.values_list?

У меня есть пользовательское свойство в моей модели Django, которая возвращает полное имя Person:

class Person(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=30)

def _get_full_name(self):
  return "%s %s" % (self.first_name, self.last_name)
full_name = property(_get_full_name)

Когда я создаю запрос, я хотел бы ссылаться на это свойство. Например:

people = Person.objects.all().values_list('full_name')

К сожалению, Django дает следующий FieldError:

FieldError: не удается разрешить ключевое слово 'full_name' в поле

Короче говоря, можно ли получить доступ к настраиваемому свойству через метод values_list()? Если нет, есть ли у кого-нибудь предложения о том, как наилучшим образом исправить эту проблему?

Ответ 1

полное имя не является полем в модели django, это невозможно. вы можете использовать методы списка

[person.fullname for person in Person.objects.all() ] 

Ответ 2

values_list может работать только с полями, полученными непосредственно из базы данных. Как отмечает zaca, вам понадобится понимание списка в реальном наборе запросов:

[person.fullname for person in Person.objects.all()]

Не используйте чрезмерное использование values_list. Это просто означает, что вы ограничиваете запрос db, поскольку, когда вы знаете, вам понадобятся только эти конкретные поля. Для почти всех применений получение стандартного набора запросов достаточно эффективно.