2011-03-01 88 views
0

所以我一直在通过模型中使用&这些选择增加了一个额外的字段到窗体,:雏型额外的字段

A_CHOICES = (
    ('none', 'none'), 
    # further conversion table 

class MyForm(ModelForm): 

extra_field_a = ChoiceField(choices=A_CHOICES) 

如果该字段是不是“无”,然后我想用它的价值在模型中的领域,但我不知道该如何找回它,我内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,“全局名称没有定义”?任何帮助非常感谢,

亚当

回答

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 
+0

对不起,还在从PHP过渡到一个漫长而痛苦的过程,我在其他地方犯了一个错误的错误。并试图保存在视图中,而不是你刚才指出的def。 – null 2011-03-01 12:40:14

+0

保存在视图中不是问题,只要你记得从你的额外字段中提取数据,因为你的'ModelForm'不知道如何处理它。让我更新一个在视图 – 2011-03-01 12:43:12

+0

保存的例子哇非常感谢:) – null 2011-03-01 12:46:26