Jua*_*Chô 1 python django django-forms
我正在尝试初始化一个包含ChoiceField在django中的表单.我有以下代码:
# in file models.py
class Locality(models.Model):
locality = models.CharField(primary_key=True, unique=True, max_length=36)
def __unicode__(self):
return self.locality
# in file forms.py
class RegisterForm(forms.Form):
def __init__(self, *args, **kwargs):
self.username = forms.CharField(required=True)
self.email = forms.EmailField(required=True)
self.locality = forms.ChoiceField(widget=forms.Select())
self.fields['locality'].choices = [l.locality for l in Locality.objects.all()]
Run Code Online (Sandbox Code Playgroud)
但是,一旦我尝试实例化,我就会在外壳上:
r = RegisterForm(username ="toto",email ="a@b.com")
我收到了'RegisterForm' object has no attribute 'fields' error.这是否因为物体尚未形成而发生?我怎样才能访问ChoiceField?
任何帮助赞赏.
你没有以Form良好的方式使用这个对象.该fields属性是通过__init__BaseForm 的方法初始化的(参见源代码)(父类forms.Form),但是你重新定义了它,所以你打破了这个过程.
所以,你应该__init__在你的__init__方法中调用父类,如下所示:
class RegisterForm(forms.Form):
username = forms.CharField(required=True)
email = forms.EmailField(required=True)
locality = forms.ChoiceField(widget=forms.Select())
def __init__(self, *args, **kwargs):
super(forms.Form, self).__init__(*args, **kwargs)
self.fields['locality'].choices = [(l.id, l.locality) for l in Locality.objects.all()]
Run Code Online (Sandbox Code Playgroud)
我把所有*Field宣言都移到了外面__init__,因为这是常见的方式.它的问题与前一个问题非常相似:覆盖Django表单的默认属性
| 归档时间: |
|
| 查看次数: |
2909 次 |
| 最近记录: |