gpt4 book ai didi

python - 如何使用 get_object_or_404 排除结果?

转载 作者:太空狗 更新时间:2023-10-29 17:26:04 25 4
gpt4 key购买 nike

在 Django 中,您可以使用排除来创建类似于 not equal 的 SQL。一个例子可能是。

Model.objects.exclude(status='deleted')

现在这很好用并且排除非常灵活。由于我有点懒惰,我想在使用 get_object_or_404 时获得该功能,但我还没有找到执行此操作的方法,因为您不能在 get_object_or_404 .

我想要的是做这样的事情:

model = get_object_or_404(pk=id, status__exclude='deleted')

但不幸的是,这不起作用,因为没有排除查询过滤器或类似过滤器。到目前为止我想出的最好的办法是做这样的事情:

object = get_object_or_404(pk=id)
if object.status == 'deleted':
return HttpResponseNotfound('text')

做那样的事情,真的违背了使用 get_object_or_404 的意义,因为它不再是一个方便的单行代码。

或者我可以这样做:

object = get_object_or_404(pk=id, status__in=['list', 'of', 'items'])

但这不是很容易维护,因为我需要使列表保持最新。

我想知道我是否缺少 django 中使用 get_object_or_404 获得所需结果的一些技巧或功能?

最佳答案

使用django.db.models.Q :

from django.db.models import Q

model = get_object_or_404(MyModel, ~Q(status='deleted'), pk=id)

除了 AND 之外,Q 对象还允许您执行 NOT(使用 ~ 运算符)和 OR(使用 | 运算符)。

请注意,Q 对象必须位于 pk=id 之前,因为关键字参数在 Python 中必须位于最后。

关于python - 如何使用 get_object_or_404 排除结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3046419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com