django - Django_filters 仅在存在 ?page=1 时才具有初始值
问题描述
我有一个视图,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
,我看到未设置过滤器:
但是,如果我这样做127.0.0.1:8000?page=1
,我会看到过滤器已正确初始化:
当我没有将 page=1 附加到我的 url 时,是什么导致我的过滤器没有默认值?
解决方案
的初始值BooleanFilter
应该是布尔值,而不是字符串:
is_suspended = django_filters.BooleanFilter(name='is_suspended', initial=False)
is_abandoned = django_filters.BooleanFilter(name='is_abandoned', initial=False)
推荐阅读
- android - 在 org.gradle.api.internal.artifacts.dsl.dependencies 类型的对象上找不到参数 [directory 'libs'] 的方法 implementation()
- pyspark - 根据条件从 spark 数据框中删除行
- woocommerce - 删除 WooCommerce 结帐时的“已添加到购物车”和“购物车已更新”消息
- swift - 为什么 `nil` 隐式展开可选打印 `nil` 而不会崩溃?
- node.js - 如何在 AWS Lambda 中将 ICU 数据添加到 Node.js?
- bash - 将陷阱添加到在 Travis CI 中运行的测试脚本
- docker - 批处理脚本将所有行作为一个调用执行
- java - 如何使用 Spring Boot 和 Angular 7 配置 CRSF
- java - 有没有办法在构建片段后调用方法?
- typescript - 在打字稿中使用绝对路径进行导入