在 Django 中,在查询集上使用 fiter() 然后 get() ?

发布于 2024-10-19 07:09:34 字数 334 浏览 0 评论 0原文

我可以在查询集上结合使用 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,但收到一条错误消息,表明该对象不存在。我是否错误地处理了这个问题,或者我的语法是否在某个地方出现了问题?谢谢

Can I combine the use of filter() and get() on querysets to return an object in a django view?
I have the following view;

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

Items are all unique for city and store. I am currently trying to filter a queryset based on the two ForeignKey fields and then use get on a CharField but am getting an error message that the object does not exist. Am I approaching this incorrectly or is my syntax off somewhere? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

未蓝澄海的烟 2024-10-26 07:09:34

如果您的相关过滤器仅返回 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]

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

If your related filter returns only 1 result, then you can use :

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

which filters the Item records and store them in a QuerySet, which has a list-lilke structure, then take the first element...

If you are sure to get a result, then you can use get instead of filter:

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

But if there exists no record which fits your filer criteria, then you get an error. So if you are not sure whether filtering will return a result or not, then use:

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

which ckecks the resulting queryset and takes the first result if exists any.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文