Подтвердить что ты не робот

Получить идентификатор объекта django на основе атрибута модели

У меня есть базовая модель с названием "Места", которая имеет это представление:

def view_index(request, place_name):

Пользователь получит доступ к этому представлению с помощью URL-адреса, подобного этому:

http://server.com/kansas

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

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

4b9b3361

Ответ 1

Вот так:

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

Ответ 2

Как выглядит ваше сопоставление 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.

Ответ 3

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

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

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

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