我有时需要确保从查询集中排除某些实例.
这是我通常的做法:

unwanted_instance = MyModel.objects.get(pk=bad_luck_number)
uninteresting_stuff_happens()
my_results = MyModel.objects.exclude(id=unwanted_instance.id)

或者,如果我有更多这样的人:

my_results = MyModel.objects.exclude(id_in=[uw_in1.id, uw_in2.id, uw_in3.id])

这"感觉"有点笨重,所以我试着:

my_ideally_obtained_results = MyModel.objects.exclude(unwanted_instance)

这不管用.但我读了here on SO篇文章,说子查询可以用作排除的参数

推荐答案

你已经在做的方式是最好的方式.

如果你正在寻找一种模型不可知的方式来做这件事,别忘了你可以做query.exclude(pk=instance.pk)件.

顺便说一句,ifDjango的ORM有一个身份映射器(目前还没有),那么您就可以做类似MyModel.objects.filter(<query>).all().remove(<instance>)的事情,但是在这方面您就不走运了.你做这件事的方式(或上面的那个)是你能做的最好的了.

哦,您还可以使用列表理解比in个查询做得更好:query.exclude(id__in=[o.id for o in <unwanted objects>])

Django相关问答推荐

HTMX中的响应未作为附件处理(即文件未下载)

Django中有修改字段值的挂钩吗?

""关系"core_Boundary_summary的列user_id中的空值"违反了非空约束|失败行包含(2,title,string,null)

当使用django-tinymce时,我在哪里指定referer?

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

Django 相当于子查询

获取 Django Rest API 的第一个和最后一个相关对象

Django Query 在基于通用类的 UpdateView 中重复了 2 次

超级用户在基于类的视图中进行身份验证

Django中的 联合(Union) 和相交(Intersect)

获取结果集中返回的元素数的 django 模板标签是什么?

Django:无法从另一个应用程序导入模型

我的 django 模板布尔变量在 javascript 中没有按预期工作

直接在Django的模板中访问ForeignKey

从python中的URL获取查询字符串的最佳方法?

获取 Django 中的缓存键列表

URL命名空间的一个真实例子

OrderingFilter 没有属性filter_queryset

Django 自定义用户邮箱帐户验证

django select_related - 何时使用它