2014-12-15 4 views
1

Есть ли в любом случае, что я мог бы получить несколько полей из базы данных Django?Django Получить несколько полей из базы данных

В Model классе у меня есть:

class Advert(models.Model): 
    cat  = models.CharField(max_length=50) 
    advertiser = models.ForeignKey(Advertiser) 
    country = models.CharField(max_length=500) 
    city  = models.CharField(max_length=500) 
    title  = models.CharField(max_length=200) 
    body  = models.CharField(max_length=200) 
    link  = models.URLField() 

def __unicode__(self): 
    return self.title 

Функция __unicode__(self) будет возвращать только название Реклама.

Как я могу получить поля: (title, body, link)?

ответ

1

Вы хотите использовать values_list функцию Django. Из примера:

>>> Advert.objects.values_list('title', 'body', 'link') 
[(u'Title', u'This is a body text line.', u'http://example.com/'), 
(u'Title 2', u'This is another body text line.', u'http://example.com/foobar')] 

Любые Нужные фильтры и аннотации следует поставить перед values_list вызова. Если вы хотите только одно поле для каждой записи, и вы хотите его в плоском списке, добавьте flat=True:

>>> Advert.objects.values_list('link', flat=True) 
[u'http://example.com/', u'http://example.com/foobar'] 
3
def __unicode__(self): 
    return u'{} - {} - {}'.format(self.title, self.body, self.link) 

Да, как отмечено ниже, используйте u, чтобы пометить его как юникод строки

+0

'__unicode__' возвращает' str' не очень хорошо. Лучше вернуть строку юникода, например. 'return u '{} - {} - {}'. format (self.title, self.body, self.link)' –

+0

Из вопроса: «Функция' __unicode __ (self) 'будет возвращать только заголовок Реклама «. Переопределение '__unicode__' нежелательно. –

+0

Его вопрос можно интерпретировать. Тем не менее, он имеет хорошие ответы ниже, и он начал кодирование без чтения минимальной документации: P –

1

Вы упускаете тот факт, что ОРМ является именно то, объект -relational картографа. Когда вы делаете my_advert = Advert.objects.get(whatever), вы получаете экземпляр объявления, в котором содержатся все поля. Таким образом, вы можете сделать my_advert.title, my_advert.body и т. Д.

+0

И вместо 'get' можно использовать' filter' или 'all', чтобы получить список объектов и' values_list' (или 'values') может возвращать только интересующие поля, поэтому базе данных не нужно возвращать все поля объектов и строить из них объекты. К сожалению, ОП не указывает, как они получили «Объявления» (ы), о которых идет речь ... –

Смежные вопросы