Можно ли ссылаться на свойство с помощью Django QuerySet.values_list? - PullRequest
13 голосов
/ 27 января 2010

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

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 ()?Если нет, есть ли у кого-нибудь предложения о том, как наилучшим образом решить эту проблему?

Ответы [ 2 ]

17 голосов
/ 27 января 2010

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

[person.fullname for person in Person.objects.all() ] 
15 голосов
/ 27 января 2010

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

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

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

...