根据模型属性获取django对象id

时间:2011-01-11 15:37:49

标签: django django-models django-views django-urls

我有一个名为“Places”的基本模型,它具有以下视图:

def view_index(request, place_name):

用户将使用类似以下的URL访问该视图:

http://server.com/kansas

“kansas”是存储在模型“Places”内名为“name”的字段中的值。

问题在于我无法弄清楚如何仅根据对象名称获取对象id。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:45)

像这样:

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

答案 1 :(得分:8)

由于您只需要id,因此您只应查询id。天真的get将检索数据库行上的所有字段。这两种方法都只能检索您想要的数据。

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

或者使用values_list:

id = Place.objects.filter(name='kansas').values_list('id', flat=True).first()

另一种方法使用only

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

答案 2 :(得分:4)

您对该视图的网址映射是什么样的?假设您正在使用"kansas"抓取网址的一部分并且设置为place_name参数,则您必须在模型的经理上执行简单的filter您正在寻找的"kansas"中的任何模型字段。

如果您的网址映射如下:

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

然后你应该能够做到

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

获取一个对象列表,其中place_name与URL中的对象匹配。从那里开始,该列表中的每个对象都应该有一个id(除非你已经重命名了ID字段),你可以得到任何其他python对象属性。