【问题标题】:Get django object id based on model attribute根据模型属性获取django对象id
【发布时间】:2011-06-07 06:12:24
【问题描述】:

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

def view_index(request, place_name):

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

http://server.com/kansas

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

问题是我不知道如何仅根据对象名称获取对象 ID。有没有办法做到这一点?

【问题讨论】:

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


    【解决方案1】:

    由于您只需要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
    

    【讨论】:

    • 与接受的答案相比,这会更有效吗?
    • 是的,但差异是否重要取决于其余列。如果该表恰好有一个巨大的文本或 json 字段,其中包含价值数百万的数据,那么绝对!
    【解决方案2】:

    该视图的 URL 映射是什么样的?假设您正在捕获其中包含 "kansas" 的 URL 部分并且设置为 place_name 参数,那么您必须在您的模型管理器上执行一个简单的 filter 在您的模型字段上正在寻找"kansas"

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

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

    那么你应该可以做到

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

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

    【讨论】:

      【解决方案3】:

      像这样:

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

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2021-03-18
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        相关资源
        最近更新 更多