2009-10-17 76 views
2

我正在用django构建一篇文章网站。 我已经添加了很多我的文章之间有很多关系是这样的: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

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

在此先感谢

+++

我想探讨的可能性增加滤波器水平为admin。但经过我说这样说:

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'] 

所有文章从管理:(

+0

我不认为这是可能的管理员,但我很想被证明是错的! – 2009-10-17 22:21:27

回答

0

如果你看看基本的过滤,尽量消失thisthat

如果要自定义过滤,你小指南:

小类forms.SelectMultiple或直接存在FilteredSelectMultipledjango.contrib.admin.widgets,并使其做你想做的事

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

+0

我正在寻找一些基本的过滤。 你能解释一下如何添加水平过滤器的例子吗? 我试图把它添加到admin: 类ArticleAdmin(admin.ModelAdmin): 排除=( '视频',) 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') 但是我的所有文章条目都消失了......在哪里添加过滤器? – 2009-10-18 12:01:03

+0

更新后的主帖 – 2009-10-18 12:15:53

+0

AFAIK filter_horizo​​ntal仅适用于ManyToMany字段。参数只是您要过滤的字段,而不是您要过滤的字段。所以在你的情况下,它只是filter_horizo​​ntal =('related',)。正如我所指出的那样,这只是基本的过滤,对于更高级的过滤,您必须亲自编写代码。 – stefanw 2009-10-18 12:28:17

相关问题