【发布时间】:2011-03-07 13:46:18
【问题描述】:
此功能在我列出搜索结果的视图中使用。在我的搜索表单中,我有一些 ModelChoiceFields 可以通过外键进行搜索。通常的工作流程意味着将我们当前的搜索变得越来越精确,因此为了禁用许多不相关的结果,我正在尝试删除如果没有其他搜索参数更改则不会返回任何结果的条目。
我正在使用对象查询集来限制某些下拉列表中的命题。 我使用这些下拉列表按外键过滤我的对象列表。
我的过滤函数参数是一个对象查询集,现在:
class MySearchForm(Form):
things = ModelChoiceField(queryset=models.Thing.objects.none())
def __init__(self, *args, **kwargs):
my_objects_queryset = kwargs.pop('my_objects_queryset',models.Thing.objects.all())
super(MySearchForm, self).__init__(*args, **kwargs)
self.fields['things'].queryset = \
models.Thing.objects.filter(object__in=my_objects_queryset).distinct()
我的问题是如何从现有的 query_set 中删除 'where close'。
在这里,我想从 my_objects_queryset 中删除 where closes which filter by thing = ForeignKey(models.Thing)
有可能吗?
类似于列出我们查询集的所有过滤器并即时编辑/删除它们的方法。
【问题讨论】:
-
很难理解你想要做什么,但也许你正在寻找与
filter相反的exclude? Link to docs -
我有一个带有许多过滤器的查询集,我想在获取对象之前列出它们并删除其中的一些。 exclude 方法不能“禁用”在查询集上制作的过滤器(我是法国人,也许我不清楚)