Проблема с django-crispy-forms и django-filter: CSS-класс не применяется к пользовательскому полю ChoiceFilter
Я использую 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'),
)
При такой настройке я ожидал, что оба поля будут иметь CSS-класс MY-CLASS
, но только поле даты отражает его, а не transaction_type. Я подозреваю, что это может быть связано с тем, что transaction_type является пользовательским полем ChoiceFilter
, но я не уверен, как решить эту проблему.
Я пробовал несколько различных подходов, таких как обновление атрибутов виджетов и применение CSS непосредственно через attrs, но пока ничего не помогло.
Кто-нибудь уже сталкивался с этой проблемой или может подсказать, как заставить CSS-класс применяться к полю ChoiceFilter
?
Надеюсь, это поможет.
ex:
import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field
from django import forms
from .models import Transaction
class TransactionFilter(django_filters.FilterSet):
transaction_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.DateFilter(
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', css_class='MY-CLASS'),
Field('date', css_class='MY-CLASS'),
)