Python 如何在django grappelli中过滤自动完成结果?

Python 如何在django grappelli中过滤自动完成结果?,python,django,autocomplete,django-queryset,django-grappelli,Python,Django,Autocomplete,Django Queryset,Django Grappelli,我们有一个软删除方案,我们只是将东西标记为已删除,然后在不同的地方过滤掉已删除的东西。我正在尝试找出如何从grapelli自动完成建议中过滤已删除的内容。看起来您可以通过某种方式将额外的搜索参数传递到ajax自动完成程序中。可能需要一个前端黑客 或 您可以使模型的默认管理器返回一个已过滤的列表,并让需要显式查看已删除项目的位置删除该限制 这可能会使默认情况在所有方面对您都更加容易。最后,我提出了以下建议: from grappelli.views.related import Autocomp

我们有一个软删除方案,我们只是将东西标记为已删除,然后在不同的地方过滤掉已删除的东西。我正在尝试找出如何从grapelli自动完成建议中过滤已删除的内容。

看起来您可以通过某种方式将额外的搜索参数传递到ajax自动完成程序中。可能需要一个前端黑客

或 您可以使模型的默认管理器返回一个已过滤的列表,并让需要显式查看已删除项目的位置删除该限制


这可能会使默认情况在所有方面对您都更加容易。

最后,我提出了以下建议:

from grappelli.views.related import AutocompleteLookup

class YPAutocompleteLookup(AutocompleteLookup):
    """ patch grappelli's autocomplete to let us control the queryset 
    by creating a autocomplete_queryset function on the model """
    def get_queryset(self):
        if hasattr(self.model, "autocomplete_queryset"):
            qs = self.model.autocomplete_queryset()
        else:
            qs = self.model._default_manager.all()
        qs = self.get_filtered_queryset(qs)
        qs = self.get_searched_queryset(qs)
        return qs.distinct()
可以通过覆盖相关url来安装:

url(r'^grappelli/lookup/autocomplete/$', YPAutocompleteLookup.as_view(), name="grp_autocomplete_lookup"),

确保这在URL中的图表之前。

如果您使用管理站点,则应利用ModelAdmin.queryset函数:

正如我发现的,更改默认模型管理器以限制结果是一个坏主意,会导致各种严重的问题。例如:阻止syncdb、shell或shell_plus运行。使第一条记录无法添加到空白数据库。确切的错误取决于你的限制,但你肯定会得到一些

这里需要的是一种告诉Grapelli要使用的queryset管理器的名称的方法。可能是通过了还是设置了

您可以使用ForeignKey.limit\u choices\u to指定简单(常量或相关字段)筛选器。Grappelli获取该值并将其作为参数“query_string”发送到GET中

然而,这可能还不够。我向Grappelli repo发布了一个请求,我使用它添加一种方法来指定要使用的记录管理器,或者只是自动使用admin queryset(ModelAdmin.queryset)

我的帖子在这里: