【问题标题】:In Django using fiter() then get() on queryset?在 Django 中使用 fiter() 然后在查询集上使用 get()?
【发布时间】:2011-02-28 08:46:24
【问题描述】:

我可以在查询集上结合使用 filter() 和 get() 在 django 视图中返回对象吗? 我有以下看法;

def my_view(request, city, store, item):
item = Item.objects.filter(store__city=city, city=city).get(item=item)

城市和商店的物品都是独一无二的。我目前正在尝试根据两个 ForeignKey 字段过滤查询集,然后在 CharField 上使用 get ,但收到一条错误消息,指出该对象不存在。我是在错误地接近这个还是我的语法在某个地方?谢谢

【问题讨论】:

    标签: django-views django-queryset


    【解决方案1】:

    如果您的相关过滤器只返回 1 个结果,那么您可以使用:

    def my_view(request, city, store, item):
        item = Item.objects.filter(store__city=city, city=city)[0]
    

    它过滤Item记录并将它们存储在一个QuerySet中,它有一个类似列表的结构,然后取第一个元素......

    如果你确定能得到结果,那么你可以用get代替filter:

    item = Item.objects.get(store__city=city, city=city)
    

    但是,如果不存在符合您的归档标准的记录,则会出现错误。因此,如果您不确定过滤是否会返回结果,请使用:

    item = Item.objects.filter(store__city=city, city=city)
    if item:
        item = item[0]
    

    检查结果查询集并获取第一个结果(如果存在)。

    【讨论】:

    • 谢谢,我正在重载变量,您的解释帮助我重新审视,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2015-09-23
    • 2016-08-17
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多