2011-01-11 11 views
16

я базовая модель под названием «Places», которая имеет вид:Получить Джанго идентификатор объекта на основе модели атрибута

def view_index(request, place_name): 

пользователь будет иметь доступ, что вид с URL, как этот:

http://server.com/kansas 

«kansas» - это значение, хранящееся в поле под названием «имя» внутри модели «Места».

Проблема в том, что я не могу понять, как получить идентификатор объекта, основанный только на имени объекта. Есть ли способ сделать это?

ответ

34

Как это:

place = Places.objects.get(name='kansas') 
print place.id 
+1

Ой ... Я глуп, как я не мог понять это? Спасибо :-) –

3

Что делает ваше отображение URL для этой точки зрения выглядит? Предполагая, что вы улавливаете часть своего URL-адреса с "kansas", и это получает значение аргумента place_name, вам нужно будет сделать простой filter на менеджере вашей модели на любом поле модели, которое вы ищете "kansas".

Если отображение URL выглядит следующим образом:

('(?P<place_name>\w+)$', 'myapp.view.view_index') 

Тогда вы должны быть в состоянии сделать только

object_list = Model.objects.filter(place_name = place_name) 

, чтобы получить список объектов, которые имеют place_name, который соответствует одному в URL. Оттуда, каждый из объектов в этом списке должен иметь id (если вы не переименовали поле ID), который вы можете получить как любой другой атрибут объекта python.

3

Поскольку вы хотите только id, вы должны запросить только id. Наивный get будет извлекать все поля в строке базы данных. Любой из этих методов будет только извлекать нужные данные.

id = Place.objects.filter(name='kansas').values('id')[0]['id'] 

Другой метод использует only:

id = Place.objects.only('id').get(name='kansas').id 
+0

Будет ли это работать более эффективно по сравнению с принятым ответом? –

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