2013-09-22 3 views
0

Я исхожу из фона PHP/SQL, поэтому вся техника доступа к данным в django - это задача, чтобы окунуться в мою голову. До сих пор в djangobook он научил меня использовать функцию unicode в models.py, если я хочу получить значение из базы данных.Каков правильный способ получения значений из базы данных в django?

def __unicode__(self): 
    return self.name 

Несомненно, это не так, как это должно было быть сделано? Во-первых, он возвращает только один столбец, а также, если я хотел получить доступ к таблице из какой-либо другой функции для другой цели, является ли столбец «name» единственным, что я могу вернуть? Как будто я могу только вернуть один столбец из таблицы - в этом случае я выбрал «имя». В настоящее время я делаю:

Publisher.objects.filter(name='test') 

, но здесь нет никакого способа изменения того, что я хочу, чтобы вернуть, его всегда вниз к статической функции Юникода обратно в models.py, который должен быть вручную изменены? Безусловно, есть способ просто работает питон версию запроса, глядя, как

"SELECT name, firstname FROM users WHERE user_id = 1" 

так в основном, как бы я написать этот запрос в Python без необходимости использовать тупую, ограниченную функцию Юникода? Как это сделает веб-приложение для производства? Я совершенно не понимаю концепцию здесь?

Спасибо, и извините за плохо объясненный вопрос.

P.S было бы лучше просто использовать SQL в django? или это плохая практика?

+0

Начать с урока Python. Затем просмотрите учебник «Опросы» Django. В полном объеме. –

ответ

4

Поля могут просто получить доступ с помощью доступа к атрибутам:

publisher = Publisher.objects.get(name='test') 
print publisher.pk 
print publisher.name 
print publisher.some_other_field 

Или, по поводу вашего примера

user = User.objects.get(pk=1) 
print user.first_name 
print user.last_name 

И, в шаблоне:

{{ user.first_name }} 

используется метод __unicode__ для отображения представления объекта. Он не используется для общего доступа к полю.


Что касается вашего вопроса, нет, вы не должны использовать SQL здесь.

+0

Эй, спасибо за ответ, что произойдет, если из Publisher.objects.get (name = 'test') возвращено несколько результатов? – user2800761

+0

@ user2800761 будет вызывать исключение 'MultipleObjectsReturned' – mariodev

+0

@ user2800761' Publisher.objects.get' будет только когда-либо возвращать один объект (и может вызвать исключение, если есть несколько совпадений или нет). Однако, если вы используете 'Publisher.objects.filter', вы получите [список] (http://docs.python.org/2/tutorial/introduction.html#lists) таких объектов. Затем вы можете перебирать его. –

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