django 将小部件应用于所有字段

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

有没有办法将 css 类应用于 ALL 字段,而不是对每个字段执行以下操作。
forms.py

class UserColorsForm(forms.ModelForm):

    class Meta:
        model = UserColors
        exclude = ('userid',)
        widgets = {
            'text_color': forms.TextInput(attrs={'class': 'color'}),
            'background_color': forms.TextInput(attrs={'class': 'color'}),
            ... 10 more
        }
django django-forms django-widget django-widget-tweaks
4个回答
4
投票

这应该有效

def __init__(self, *args, **kwargs):
    super(UserColorsForm, self).__init__(*args, **kwargs)
    for field in self.fields: 
        field.wiget.attrs['class'] = 'color'

4
投票

更新Mihai的答案,方法是:

def __init__(self, *args, **kwargs):
    super(YourForm, self).__init__(*args, **kwargs)
    for field in self.fields:
        self.fields[field].widget.attrs.update({'class': 'myfieldclass'})

1
投票

尝试迭代表单字段:

css1 = {'class': 'color', }
css2 = {'class': 'nocolor', }
class UserColorsForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UserColorsForm, self).__init__(*args, **kwargs)
        for key, value in self.fields.iteritems():
            if key in ['field1', 'field2', ...]: # You can define a 
                # subset of fields in a list to selectively apply css classes, 
                # OR just iterate and apply to everything 
                # (take out the if-else statement)
                self.fields[key].widget.attrs.update(css1)
            else:
                self.fields[key].widget.attrs.update(css2)

0
投票

您可以创建所需字段的列表。然后创建一个函数,该函数使用字段作为键返回字典。最后,您设置 Meta.widgets 来调用您创建的函数。

fields_you_want = [
            'first_name',
            'last_name',
            'other_names',
        ] 


def get_widget_dictionary():

    keys = fields_you_want

    values = [ forms.TextInput(attrs={'class': 'form-control'}) for key in keys ]
    result = dict(zip(keys, values))
    return result


class UserColorsForm(forms.ModelForm):

    class Meta:
        model = UserColors
        widgets = get_widget_dictionary()
© www.soinside.com 2019 - 2024. All rights reserved.