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

Osc*_*lal 23 django django-models django-urls django-views

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

def view_index(request, place_name):
Run Code Online (Sandbox Code Playgroud)

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

http://server.com/kansas
Run Code Online (Sandbox Code Playgroud)

"堪萨斯"是存储在模型"位置"内名为"名称"的字段中的值.

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

gru*_*czy 52

像这样:

place = Places.objects.get(name='kansas')
print place.id
Run Code Online (Sandbox Code Playgroud)


Sco*_*ord 9

既然你只想要id,你应该只查询id.天真get将检索数据库行上的所有字段.这两种方法中的任何一种都只能检索您想要的数据.

id = Place.objects.filter(name='kansas').values('id')[0]['id']
Run Code Online (Sandbox Code Playgroud)

或者使用values_list:

id = Place.objects.filter(name='kansas').values_list('id', flat=True).first()
Run Code Online (Sandbox Code Playgroud)

另一种方法用途only:

id = Place.objects.only('id').get(name='kansas').id
Run Code Online (Sandbox Code Playgroud)

  • 是的,但差异是否重要取决于其余列。如果该表碰巧有一个巨大的文本或 json 字段,其中包含数百万的数据,那么绝对! (2认同)

Dan*_*olo 5

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

如果您的 URL 映射如下所示:

('(?P<place_name>\w+)$', 'myapp.view.view_index')
Run Code Online (Sandbox Code Playgroud)

那么你应该能够做

object_list = Model.objects.filter(place_name = place_name)
Run Code Online (Sandbox Code Playgroud)

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