2011-02-28 83 views
1

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

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

项目都是独特的城市和商店。我目前正在尝试基于两个ForeignKey字段筛选查询集,然后在CharField上使用get,但是收到对象不存在的错误消息。我是否正确地处理了这个问题,或者我的语法是否在某处?由于

回答

1

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

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

其过滤项记录并将其存储在一个查询集,其中有一个列表lilke结构,然后在第一个元素...

如果你一定要得到一个结果,那么你可以使用获得的,而不是过滤器:

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

但是,如果不存在记录下哪些适合你的文件管理器CRI teria,那么你会得到一个错误。所以,如果你不知道过滤是否会返回一个结果还是不行,那么使用:

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

这ckecks生成的查询集,如果存在任何需要的第一个结果。

+0

谢谢,我超载变量,你的解释帮助我再看一次,非常感谢。 – thesteve 2011-02-28 09:09:53