我想在我的forms.Form中添加一个实例参数,这样我就可以在视图中初始化它并在我的表单中获得预期的结果。我知道我可以使用'initial'
,但我想尝试不同的东西。
city_form = CityForm(instance=user.profile.city)
class CityForm(forms.Form):
post_nr = forms.CharField(max_length=5, widget=forms.TextInput(attrs={'placeholder': 'Post nr.'}))
city = forms.CharField(required=False, max_length=30, widget=forms.TextInput(attrs={'placeholder': 'By', 'readonly': True}))
class Meta:
model = City
def __init__(self, *args, **kwargs):
self.instance = kwargs.pop('instance', None)
if self.instance:
self.fields['post_nr'] = self.instance.post_code
self.fields['city'] = self.instance.name
super(CityForm, self).__init__(*args, **kwargs)
引用的实例将是一个City对象,来自我的City类,它具有我在上面指定的变量。
但我得到了:
'CityForm'对象没有属性'field'
答案 0 :(得分:1)
在您致电fields
之前,表单没有super().__init__()
属性。您需要移动该代码。您当前正在做的是使用其值覆盖字段实例。相反,您应该设置初始值:
def __init__(self, *args, **kwargs):
self.instance = kwargs.pop('instance', None)
super(CityForm, self).__init__(*args, **kwargs)
if self.instance:
self.initial['post_nr'] = self.instance.post_code
self.initial['city'] = self.instance.name
您可能还想查看使用ModelForm
。