4

Is there a way to apply css class to ALL fields instead of doing the following for every single field.
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
        }
deathangel908
  • 8,601
  • 8
  • 47
  • 81

3 Answers3

4

This should work

def __init__(self, *args, **kwargs):
    super(UserColorsForm, self).__init__(*args, **kwargs)
    for field in self.fields: 
        field.wiget.attrs['class'] = 'color'
Mihai Zamfir
  • 2,167
  • 4
  • 22
  • 37
4

To update Mihai's answer, the way is:

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

Try to iterate the form fields:

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)
James
  • 2,488
  • 2
  • 28
  • 45