我想向我的 forms.Form 添加一个实例参数,这样我可以在视图中初始化它并在我的表单中获得预期的结果。我知道我可以使用'initial',但我想尝试一些不同的东西。
city_form = CityForm(instance=user.profile.city)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
引用的实例将是一个 City 对象,来自我的 City 类,它具有我上面指定的变量。
但我得到:
“CityForm”对象没有属性“field”
fields在您调用 之前,表单没有属性super().__init__()。您需要将该代码向下移动。您当前正在做的是用字段实例的值覆盖字段实例。相反,您应该设置初始值:
def __init__(self, *args, **kwargs):
instance = kwargs.get('instance', None)
super(CityForm, self).__init__(*args, **kwargs)
if instance:
self.initial['post_nr'] = instance.post_code
self.initial['city'] = instance.name
Run Code Online (Sandbox Code Playgroud)
您可能还想看看使用ModelForm.
| 归档时间: |
|
| 查看次数: |
5797 次 |
| 最近记录: |