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
    )
    
Вернуться на верх