Django фильтр OrderingFilter выбор по умолчанию
Я создал фильтр упорядочивания с помощью фильтров django и мне стало интересно, как я могу установить выбор по умолчанию и удалить пустой выбор.
class MyFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
o = django_filters.OrderingFilter(
choices=(
("created", _("Created, old to new")),
("-created", _("Created, new to old"))
),
fields = (
"created", "created"
)
)
При выводе формы фильтрации по умолчанию отображается пустой выбор "----". Я хотел бы установить один из вариантов фильтрации по умолчанию и удалить пустой вариант.
Вы можете опустить пустую метку, указав, что поле является обязательным, так:
class MyFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
o = django_filters.OrderingFilter(
choices=(
('created', _('Created, old to new')),
('-created', _('Created, new to old'))
),
fields = (
'created', 'created'
),
required=True
)
Исправление заключалось в отключении опции empty путем установки empty_label и null_label в None. Таким образом, первый вариант стал вариантом по умолчанию. Обратите внимание, что первый вариант должен совпадать с порядком по умолчанию вашего набора запросов, чтобы он совпадал при загрузке страницы без использования фильтра.
class MyFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
o = django_filters.OrderingFilter(
choices=(
('created', _('Created, old to new')),
('-created', _('Created, new to old'))
),
fields = (
'created', 'created'
),
empty_label = None,
null_label = None
)