Может ли графический интерфейс администратора Django отфильтровать пустое текстовое поле? - PullRequest
3 голосов
/ 24 февраля 2009

У меня есть модель Django, содержащая текстовое поле. В интерфейсе администратора я хотел бы иметь возможность фильтровать только те записи, которые содержат текст в этом поле. Возможно ли это?

Код, подобный этому, фильтрует содержимое текстового поля, но показывает фильтры на «Все» и каждой отдельной записи в фильтре. Я хотел бы отфильтровать «Все» или «Содержит что-то».

class MyModel(models.Model):
    # ...
    textfield = models.CharField(max_length=100)
    # ...

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('...', 'textfield', '...')
    list_filter = ('...', 'textfield', '...')

Ответы [ 3 ]

6 голосов
/ 24 февраля 2009

Да, но это не задокументировано. Посмотрите на django\contrib\admin\filterspecs.py, чтобы увидеть, как создаются фильтры по умолчанию и как вы можете создавать свои собственные. Эта функция запланирована для версии 1.1, и уже есть патч, если вы хотите попробовать эту функцию сейчас в последней редакции HEAD: http://code.djangoproject.com/ticket/5833

Также не задокументирован тот факт, что вы можете поместить произвольные параметры GET в URL своей страницы change_list для фильтрации результатов. Например, /admin/app/model/?field1__lte=5&field2__gte=10 К сожалению, ?field__isnull=True не будет работать, но вы можете легко поэкспериментировать, чтобы найти фильтр, который будет работать в вашем случае.

0 голосов
/ 16 августа 2012

Да, вы можете расширить SimpleListFilter и легко сделать это начиная с django 1.4. См:

См .: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

0 голосов
/ 24 февраля 2009

Нет. Смотри http://docs.djangoproject.com/en/dev/ref/contrib/admin/#list-filter

Установить list_filter для активации фильтров в правая боковая панель списка изменений страница админа. Это должно быть список имен полей, и каждый указанное поле должно быть либо BooleanField, CharField, DateField, DateTimeField, IntegerField или ForeignKey.

Но ...

Две вещи.

  1. Обязательно оставьте пустым для вашего текстового поля.

    класс MyModel (models.Model): # ... textfield = models.CharField (max_length = 100, пусто = True) # ...

  2. Добавьте метод is_blank, чтобы помочь с обработкой. Не фильтрует, но полезно.

    def is_blank (self): return len (self.textfield) == 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...