Django:管理员,向多项选择字段添加一些新过滤器

Posted

技术标签:

【中文标题】Django:管理员,向多项选择字段添加一些新过滤器【英文标题】:Django: Admin, adding some new filters to a multiple choice field 【发布时间】:2010-12-07 16:01:33 【问题描述】:

我正在使用 django 构建一个文章站点。 我以这种方式在我的文章之间添加了多对多的关系:

class Article (models.Model):
    # Tiny url
    url = models.CharField(max_length = 30, unique=True)
    is_published = models.BooleanField()
    author = models.CharField(max_length = 150)
    title = models.CharField(max_length = 200)
    short_description = models.TextField(max_length = 600)
    body = tinymce_models.htmlField()
    related = models.ManyToManyField("self")

现在在我的管理站点中,我看到了多个选择框(在此处查看图片http://img.skitch.com/20091017-mfs2mbhbuudk2rgquium1bu61d.png)

我想要的是使用这个可供用户选择文章以将它们绑定到当前文章的框。例如,有没有办法在那里添加一些过滤?例如。如果我想按部分过滤所有文章?然后关闭以前的结果并按名称等过滤整个集合?

提前致谢

+++

我正在尝试调查向管理员添加水平过滤器的可能性。但是在我这样添加之后:

class ArticleAdmin(admin.ModelAdmin):
    exclude = ('video', )

    js = ('/site_media/js/tiny_mce/tiny_mce.js', 
          )
    list_display = ('title', 'author', 'section', 'is_published', 'pub_date')
    list_filter = ('author', 'section', 'is_published', 'pub_date')
    filter_horizontal = ['related', ]
    search_fields = ['body', 'title', 'short_description', 'seo_keywords']

所有文章都从管理员中消失了:(

【问题讨论】:

我认为这在管理员中是不可能的,但我很想被证明是错误的! 【参考方案1】:

如果您寻找基本过滤,请尝试this 或that:

如果您想自定义过滤,您实际上可以这样做。一个小指南:

子类forms.SelectMultiple 或直接从django.contrib.admin.widgets 现有的FilteredSelectMultiple 并让它做你想做的事。

然后在你的 admin.py 中继承 ModelAdmin 并覆盖 formfield_for_manytomany(在 django.contrib.admin.options 中查找该方法)并将现有小部件与新小部件交换。

【讨论】:

我正在寻找一些基本的过滤。你能举例说明如何添加水平过滤器吗?我尝试将此添加到管理员: class ArticleAdmin(admin.ModelAdmin): exclude = ('video', ) js = ('/site_media/js/tiny_mce/tiny_mce.js', ) list_display = ('title', ' author', 'section', 'is_published', 'pub_date') list_filter = ('author', 'section', 'is_published', 'pub_date') filter_horizo​​ntal = ('section', 'is_published') 但是我所有的文章条目刚刚消失了...在哪里添加过滤器? AFAIK filter_horizo​​ntal 仅适用于多对多字段。参数只是您要过滤的字段,而不是您要过滤的字段。所以在你的情况下,它只是 filter_horizo​​ntal = ('related',)。正如我所指出的,这只是基本过滤,对于更高级的过滤,您必须自己编写代码。

以上是关于Django:管理员,向多项选择字段添加一些新过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django admin 根据另一个字段值过滤一个外部字段

Django 多项选择字段/复选框选择多个

如何将标签添加到Django管理员字段

将 Django 中的多对多关系表示为两个多项选择

多对多字段的 Django 表单上的逗号分隔文本而不是多项选择

Django 管理站点:添加用户页面如何工作(编辑更多字段)?