django-crispy-forms 和 django-filter 的问题:CSS 类不适用于自定义 ChoiceFilter 字段

问题描述 投票:0回答:1

我正在使用

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
字段有建议吗?

python django django-filter django-crispy-forms
1个回答
0
投票

希望这有帮助。

例如:

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'),
        )
© www.soinside.com 2019 - 2024. All rights reserved.