Django: Admin, добавление новых фильтров в поле множественного выбора

Я создаю сайт статьи, используя 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']

Все статьи исчезли из админки :(


person Oleg Tarasenko    schedule 17.10.2009    source источник
comment
Я не думаю, что это возможно в админке, но я хотел бы оказаться неправым!   -  person Nick Craig-Wood    schedule 18.10.2009


Ответы (1)


Если вам нужна базовая фильтрация, попробуйте это или что:

Если вы хотите настроить фильтрацию, вы можете это сделать. Небольшой путеводитель:

Подкласс forms.SelectMultiple или непосредственно существующий FilteredSelectMultiple из django.contrib.admin.widgets и заставьте его делать то, что вы хотите.

Затем создайте подкласс ModelAdmin в вашем admin.py и перезапишите formfield_for_manytomany (ищите этот метод в django.contrib.admin.options) и замените существующий виджет новым.

person stefanw    schedule 18.10.2009
comment
Я ищу базовую фильтрацию. Можете ли вы объяснить мне на примере, как добавить горизонтальный фильтр? Я попытался добавить это в админку: class ArticleAdmin(admin.ModelAdmin): exclude = ('video', ) js = ('/site_media/js/tiny_mce/tiny_mce.js', ) list_display = ('title', ' автор», «раздел», «опубликовано», «дата_публикации») list_filter = («автор», «раздел», «опубликовано», «дата_публикации») filter_horizontal = («раздел», «опубликовано») Но все мои статьи просто исчез... Куда добавить фильтр? - person Oleg Tarasenko; 18.10.2009
comment
AFAIK filter_horizontal работает только с полями ManyToMany. Аргументы — это просто поля, которые вы хотите фильтровать, а НЕ поля, по которым вы хотите фильтровать. Так что в вашем случае это просто filter_horizontal = ('related',). Как я уже говорил, это просто базовая фильтрация, для более сложной фильтрации вам нужно написать код самостоятельно. - person stefanw; 18.10.2009