我正在使用
django-filter
和 django-crispy-forms
在 Django 中创建过滤器表单,但我在将 CSS 类应用到自定义 ChoiceFilter
字段时遇到问题。 CSS 类已成功应用于日期字段,但不适用于 transaction_type
字段,该字段定义为 ChoiceFilter
。
这是我当前的代码:
import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field
from .models import Transaction
class TransactionFilter(django_filters.FilterSet):
type = django_filters.ChoiceFilter(
choices=Transaction.TRANSACTION_TYPE_CHOICES,
field_name="type",
lookup_expr="iexact",
empty_label="Any",
)
class Meta:
model = Transaction
fields = ['transaction_type', 'date']
def __init__(self, *args, **kwargs):
super(TransactionFilter, self).__init__(*args, **kwargs)
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Field('transaction_type', css_class='MY-CLASS'),
Field('date', css_class='MY-CLASS'),
)
在此设置中,我希望两个字段都具有
MY-CLASS
CSS 类,但只有日期字段反映它,而不是 transaction_type。我怀疑这可能是由于 transaction_type 是自定义 ChoiceFilter
字段,但我不确定如何解决它。
我尝试了几种不同的方法,例如更新小部件属性和直接通过 attrs 应用 CSS,但到目前为止没有任何效果。
有人以前遇到过这个问题,或者对如何强制 CSS 类应用于
ChoiceFilter
字段有建议吗?
希望这有帮助。
例如:
import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field
from djangi import forms
from .models import Transaction
class TransactionFilter(django_filters.FilterSet):
type = django_filters.ChoiceFilter(
choices=Transaction.TRANSACTION_TYPE_CHOICES,
field_name="type",
lookup_expr="iexact",
empty_label="Any",
widget=forms.Select(attrs={'class': 'MY-CLASS'}),
)
date = django_filters.DataFilter(
field_name='date',
lookup_expr='exact',
widget=forms.DateInput(attrs={'class': 'MY-CLASS'}),
)
class Meta:
model = Transaction
fields = ['transaction_type', 'date']
def __init__(self, *args, **kwargs):
super(TransactionFilter, self).__init__(*args, **kwargs)
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Field('transaction_type'),
Field('date'),
)