我有一个名为“Places”的基本模型,它具有以下视图:
def view_index(request, place_name):
用户将使用类似以下的URL访问该视图:
http://server.com/kansas
“kansas”是存储在模型“Places”内名为“name”的字段中的值。
问题在于我无法弄清楚如何仅根据对象名称获取对象id。有没有办法做到这一点?
答案 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对象属性。