Django_filters имеют начальное значение только тогда, когда присутствует? Page = 1 - PullRequest
0 голосов
/ 29 июня 2018

У меня есть представление, AccoutList, которое пытается отобразить таблицу django_table2. Исходный код представления:

class AccountList(SingleTableMixin, FilterView):
    model = Account
    table_class = AccountTable
    template_name = 'accounts/account_list.html'
    context_table_name = 'object_list'
    ordering = ['vps']

    filterset_class = AccountFilter

Этот вид в настоящее время использует этот набор фильтров (из django_filters):

import django_filters
from accounts.models import Account

class AccountFilter(django_filters.FilterSet):
    class Meta:
        model = Account
        fields = ['is_suspended', 'is_abandoned']

    is_suspended = django_filters.BooleanFilter(name='is_suspended', initial='False')
    is_abandoned = django_filters.BooleanFilter(name='is_abandoned', initial='False')

    def __init__(self, data=None, *args, **kwargs):
        # if filterset is bound, use initial values as defaults
        if data is not None:
            # get a mutable copy of the QueryDict
            data = data.copy()

            for name, f in self.base_filters.items():
                initial = f.extra.get('initial')

                # filter param is either missing or empty, use initial as default
                if not data.get(name) and initial:
                    data[name] = initial

        super().__init__(data, *args, **kwargs)

Используя этот шаблон:

{% if filter %}
    <form action="" method="get" class="form form-inline">
        {{ filter.form.as_p }}
        <input type="submit" />
    </form>
{% endif %}

{% render_table object_list %}

{% endblock %}

Это мой из моих urls.py

path('', login_required(AccountList.as_view())),

Когда я захожу на мою страницу, 127.0.0.1:8000, я вижу, что фильтры не установлены: enter image description here

Но тогда, если я сделаю 127.0.0.1:8000?page=1, я вижу, что фильтры правильно инициализированы:

enter image description here

Что приводит к тому, что мои фильтры не имеют значения по умолчанию, когда к моему URL не добавлен page = 1?

1 Ответ

0 голосов
/ 29 июня 2018

Начальное значение BooleanFilter должно быть логическим, а не строкой:

is_suspended = django_filters.BooleanFilter(name='is_suspended', initial=False)
is_abandoned = django_filters.BooleanFilter(name='is_abandoned', initial=False)
...