Проблема с 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'),
        )
Вернуться на верх