我有一个基本模型名为"Places",其中包含以下视图:
def view_index(request, place_name):
用户将通过以下URL访问该视图:
http://server.com/kansas
"kansas" 是存储在模型 "Places" 的名为 "name" 的字段中的一个值。
问题是我无法仅基于对象名称来获取对象id。是否有方法可以做到这一点?
我有一个基本模型名为"Places",其中包含以下视图:
def view_index(request, place_name):
用户将通过以下URL访问该视图:
http://server.com/kansas
"kansas" 是存储在模型 "Places" 的名为 "name" 的字段中的一个值。
问题是我无法仅基于对象名称来获取对象id。是否有方法可以做到这一点?
像这样:
place = Places.objects.get(name='kansas')
print(place.id)
如果你只需要 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
"kansas"
的部分,并将其设置为place_name
参数,那么你就需要在你的模型管理器上简单地进行一次filter
,以查找你所要寻找的"kansas"
字段。如果你的URL mapping如下所示:('(?P<place_name>\w+)$', 'myapp.view.view_index')
object_list = Model.objects.filter(place_name = place_name)
要获取一个对象列表,其中place_name
与URL中的匹配。从那里开始,该列表中的每个对象都应该有一个id
(除非您已重命名ID字段),您可以像访问任何其他Python对象属性一样访问它。
除了接受的响应之外,您可以按如下方式探索“Place”模型中所有地点的ID:
使用列表推导或任何其他方便的数据结构。
objects = Place.objects.all()
id_name_pair = [(object.id, object.name) for object in objects]
这将返回一个元组列表,其中包含您的“Place”模型的每个名称及其对应的id。