在Django中使用fiter()然后get()在queryset上?

时间:2011-02-28 08:46:24

标签: django-views django-queryset

我可以在查询集上结合使用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但是收到一条错误消息,指出该对象不存在。我接近这个错误还是我的语法在某处?感谢

1 个答案:

答案 0 :(得分:1)

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

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

过滤Item记录并将它们存储在QuerySet中,该QuerySet具有list-lilke结构,然后取第一个元素......

如果您确定要获得结果,那么您可以使用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]

它会阻塞生成的查询集,并在存在任何结果时获取第一个结果。