我有两个ModelFields (Char和Decimal),使用clean_formfield()方法分别清理它们是很简单的。但是,为了显示这两个表单字段,我想只显示一个输入字段和一个ChoiceField,用户可以在这里决定下一个输入是单词还是数字。拆分是必要的,因为我希望稍后对数字进行一些聚合。
显然,由于依赖关系,我不能使用clean_formfield(),因此必须使用表单清洁器。问题是如何实现一次“迟来的清理”?
class Input(models.Model):
...
number = models.DecimalField()
word = models.CharField()
...
class InputForm(forms.ModelForm):
...
type = forms.CharField(widget=forms.RadioSelect(choices=(('word','Word'),('number','Number'),)))
input = forms.CharField()
...
def clean(self):
cleaned_data = self.cleaned_data
type = cleaned_data.get('type')
input = cleaned_data.get('input')
if type == 'number':
<<< clean_Decimal_Formfield >>>
cleaned_data['number'] = input
cleaned_data['word'] = None
else:
<<< clean_Char_Formfield >>>
cleaned_data['number'] = None
cleaned_data['word'] = input
return cleaned_data发布于 2011-03-25 12:03:09
这是没有必要发明一个新的方法‘晚FormField清洗’!就这样做吧:
...
if type == 'number':
cleaned_data['number'] = input
cleaned_data['word'] = None
else:
cleaned_data['number'] = None
cleaned_data['word'] = input
...发布于 2011-03-23 10:22:32
我坚持这个,一个模型字段=一个表单字段。如果只需要保存一个字段(数字或文本),则可以根据无线电选择状态(平凡的js)隐藏/显示这两个字段。
为了防止保存这两个值,而不是在表单的清理中,您可以检查是否只填充了一个字段,并且一个字段是否与无线电选择兼容。
https://stackoverflow.com/questions/5403323
复制相似问题