【问题标题】:Filter data from queryset in Django wihtout returning the entire queryset从 Django 中的查询集中过滤数据而不返回整个查询集
【发布时间】:2017-03-07 06:23:17
【问题描述】:

我正在尝试从 Djano 中的给定对象获取属性。我得到了正确的价值,但我很好奇是否有更好的方法来获取这些数据。

我正在使用以下方法获取名称属性:

owner_name = Owner.objects.filter(id=id).values('name')

它正确地返回了我正在寻找的name 属性,但它的形式是:

<QuerySet [{'name': u'John Doe'}]>

我怎样才能让它只返回“John Doe”而不是&lt;QuerySet [{'name': u'John Doe'}]&gt;

编辑:我发现我可以通过以下方式获得所需的信息: owner_name[0].get('name')

它会返回John Doe。有没有更好的方法来获得 1 个属性?

【问题讨论】:

    标签: django django-models django-views django-rest-framework


    【解决方案1】:

    您需要一个带有flat=True 参数的values_list 查询。来自docs

    一个常见的需求是获取某个模型实例的特定字段值。为此,请使用 values_list() 后跟 get() 调用:

    Entry.objects.values_list('headline', flat=True).get(pk=1)

    或者在你的情况下:

    Owner.objects.values_list('name', flat=True).get(id=id)
    

    请注意,get 会在没有完全匹配的结果时引发异常。如果这是可能的,比如说因为您正在过滤除 id 以外的其他内容,或者因为可能没有匹配的对象,您可以捕获异常,或者您可以使用返回的名称列表并检查其长度。

    【讨论】:

    • 谢谢。正是我在阅读文档时错过的内容。那我就可以处理异常了。
    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 2020-06-22
    • 2021-10-21
    • 2020-08-22
    • 2019-04-15
    • 2011-09-29
    相关资源
    最近更新 更多