模型表单额外字段
我在一个表单里通过模型添加了一个额外的字段,并且使用了这些选项:
A_CHOICES = (
('none', 'none'),
# further conversion table
class MyForm(ModelForm):
extra_field_a = ChoiceField(choices=A_CHOICES)
如果这个字段的值不是'none',我想把它的值用在模型的一个字段里,但我不太确定怎么获取这个值。我在MyForm
里试过:
def cleaned_extra(self):
if(self.cleaned_data.get('extra_field_a') != 'none'):
return self.extra_field_a
else:
return self.original_field
但是我遇到了一个NameError,提示'global name not defined'。希望能得到一些帮助。
亚当
1 个回答
1
这正是你获取它的方式。虽然语法看起来有点奇怪,但NameError
在哪里呢?self
未定义?你把这段代码放在哪里了?
通常,这种特定字段的代码会放在clean_FOO
方法里。http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-and-field-validation
def clean_extra_field_a(self):
data = self.cleaned_data.get('extra_field_a')
if data != 'none':
return data
return None # remember to set this field as required=False
def save(self, *args, **kwargs):
# override save to do something with your extra field.
self.instance.myfield = self.cleaned_data.get('extra_field_a')
super(MyForm).save(*args, **kwargs)
更新:在视图中保存没有问题。
mymodel = myform.save(commit=False)
# ModelForm's will return the object being created/edited on save()
# commit=False will prevent a database save
mymodel.myfield = myform.cleaned_data.get('extra_field_a')
mymodel.save()
# note if you have an m2m, there is an extra method to call on commit=False