2011-01-11 63 views
16

我有一个基本的型号命名为“邻居”其中有这样的观点:获取Django的对象ID基于模型属性

def view_index(request, place_name): 

用户将访问一个网址这一观点像这样的:

http://server.com/kansas 

“堪萨斯”是存储在模型“地点”内名为“名称”的字段中的值。

问题是,我不知道如何获得基于对象名称的对象ID。有没有办法做到这一点?

回答

34

像这样:

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

哦,我...我傻,我怎么能不弄明白?谢谢:-) – 2011-01-11 15:45:41

3

什么是该视图的URL映射是什么样子?假设你在其中捕获了部分网址"kansas",并且该参数设置为place_name,你必须在模型的管理器上对您要查找的任何模型字段"kansas"中的filter进行简单处理。

如果你的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

与接受的答案相比,这种方式的执行效率会更高吗? – 2017-08-18 19:10:45