Ответ 1
Вот так:
place = Places.objects.get(name='kansas')
print place.id
У меня есть базовая модель с названием "Места", которая имеет это представление:
def view_index(request, place_name):
Пользователь получит доступ к этому представлению с помощью URL-адреса, подобного этому:
http://server.com/kansas
"kansas" - это значение, хранящееся в поле с именем "name" внутри модели "Places".
Проблема в том, что я не могу понять, как получить идентификатор объекта, основанный только на имени объекта. Есть ли способ сделать это?
Вот так:
place = Places.objects.get(name='kansas')
print place.id
Как выглядит ваше сопоставление URL для этого представления? Предполагая, что вы захватили часть своего URL-адреса с помощью "kansas"
в нем, и он получает значение аргумента place_name
, вам нужно будет сделать простой filter
в диспетчере моделей на любом поле модели, которое вы ищет "kansas"
in.
Если ваше сопоставление URL-адресов выглядит следующим образом:
('(?P<place_name>\w+)$', 'myapp.view.view_index')
Тогда вы должны иметь возможность делать только
object_list = Model.objects.filter(place_name = place_name)
чтобы получить список объектов, у которых есть place_name
, который соответствует URL-адресу. Оттуда каждый из объектов в этом списке должен иметь id
(если вы не переименовали поле ID), который вы можете получить как любой другой атрибут объекта python.
Поскольку вы хотите только id
, вы должны запросить только id
. Наивный get
будет извлекать все поля в строке базы данных. Любой из этих методов будет извлекать нужные данные.
id = Place.objects.filter(name='kansas').values('id')[0]['id']
В другом методе используется only
:
id = Place.objects.only('id').get(name='kansas').id