【发布时间】:2011-03-04 01:12:25
【问题描述】:
在 Django 中,您可以使用 exclude 创建类似于 not equal 的 SQL。一个例子可能是。
Model.objects.exclude(status='deleted')
现在这很好用,并且 exclude 非常灵活。由于我有点懒,我想在使用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 来获得所需的结果?
【问题讨论】:
-
这不是一个真正的答案,但似乎您实际上并不想为软删除的对象设置 404。软删除的重点是保持对象“以防万一”。