Django向模型formset添加属性

时间:2011-11-25 15:16:47

标签: django django-forms

如何为我的formset中的字段添加新的class属性?我认为它将沿着这些代码行,但是在formset对象中不存在属性字段。

 55 # create the formset
 56 ItemUserDetailsFormset = modelformset_factory(CartItemUserDetails,
 57             exclude=['cart', 'cart_item'], formset=BaseItemUserDetailsFormset)

 37 class BaseItemUserDetailsFormset(BaseModelFormSet):
 38     def __init__(self, *args, **kwargs):
 39         super(BaseItemUserDetailsFormset, self).__init__(*args, **kwargs)
 40         self.fields['first_name'].widgets = forms.TextInput(attrs={"class":"required"})

1 个答案:

答案 0 :(得分:3)

您正尝试在 formset 上设置fields属性。您需要在表单类上设置它,而不是 formset 类。

所以,你需要像...这样的东西。

class ItemUserDetailsForm(forms.ModelForm):
    class Meta:
        model = CartItemUserDetails

    def __init__(self, *args, **kwargs):
        super(ItemUserDetailsForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].widget = forms.TextInput(attrs={ 'class': 'required' })
        # [...]

ItemUserDetailsFormset = modelformset_factory(CartItemUserDetails, 
    form=ItemUserDetailsForm, 
    exclude=['cart', 'cart_item'],
)

可悲的是,我扫描了文档,但没有在Django文档中看到form关键字参数的文档,但是如果你看the modelform_factory function itself就会清楚地看到它(见第371行)。

另外,如果您正在更改的唯一内容是小部件属性,并且如果您使用的是Django&gt; = 1.2(您应该这样),则表单上有slightly simpler syntax:< / p>

class ItemUserDetailsForm(forms.ModelForm):
    class Meta:
        model = CartItemUserDetails
        widgets = {
            'first_name': forms.TextInput(attrs={ 'class': 'required' }),
            # [...]
        }