【问题标题】:How to filter autocompletion results in django grappelli?如何过滤 django grappelli 中的自动完成结果?
【发布时间】:2013-07-25 00:12:59
【问题描述】:

我们有一个软删除方案,我们只需将内容标记为已删除,然后在各个位置过滤已删除的内容。我试图弄清楚如何从gratelli自动完成建议中过滤掉已删除的内容。

【问题讨论】:

    标签: python django autocomplete django-queryset django-grappelli


    【解决方案1】:

    看起来您可以以某种方式将额外的搜索参数传递给 ajax 自动完成器。可能需要前端 hack。

    https://github.com/sehmaschine/django-grappelli/blob/master/grappelli/views/related.py#L101

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

    这可能会使默认情况对您来说更容易。

    【讨论】:

      【解决方案2】:

      最后我选择了这个:

      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"),
      

      确保这在您的网址中位于 Grappelli 之前。

      【讨论】:

        【解决方案3】:

        如果您使用管理站点,您应该利用 ModelAdmin.queryset 函数: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset

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

        这里需要一种方法来告诉 Grappelli 要使用的查询集管理器的名称。传入或设置?

        您可以使用 ForeignKey.limit_choices_to 指定一个简单的(常量或相关字段)过滤器。 Grappelli 抓取该值并将其作为参数 'query_string' 在 GET 中发送。

        但是,这可能还不够。我向 Grappelli 存储库发布了一个请求,用于添加一种方法来指定要使用的记录管理器,或者只是自动使用管理查询集 (ModelAdmin.queryset)。

        我的帖子在这里: https://github.com/sehmaschine/django-grappelli/issues/362

        【讨论】:

          猜你喜欢
          • 2017-01-20
          • 1970-01-01
          • 2013-09-14
          • 2014-04-05
          • 2011-08-27
          • 2014-05-09
          • 2014-02-24
          • 2015-12-09
          • 2014-09-16
          相关资源
          最近更新 更多