首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >晚期Formfield清理-窗体子类中的清洁Formfield

晚期Formfield清理-窗体子类中的清洁Formfield
EN

Stack Overflow用户
提问于 2011-03-23 09:47:07
回答 2查看 140关注 0票数 0

我有两个ModelFields (Char和Decimal),使用clean_formfield()方法分别清理它们是很简单的。但是,为了显示这两个表单字段,我想只显示一个输入字段和一个ChoiceField,用户可以在这里决定下一个输入是单词还是数字。拆分是必要的,因为我希望稍后对数字进行一些聚合。

显然,由于依赖关系,我不能使用clean_formfield(),因此必须使用表单清洁器。问题是如何实现一次“迟来的清理”?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-25 12:03:09

这是没有必要发明一个新的方法‘晚FormField清洗’!就这样做吧:

代码语言:javascript
复制
...
if type == 'number':           
    cleaned_data['number'] = input
    cleaned_data['word'] = None
else:
    cleaned_data['number'] = None
    cleaned_data['word'] = input
...
票数 0
EN

Stack Overflow用户

发布于 2011-03-23 10:22:32

我坚持这个,一个模型字段=一个表单字段。如果只需要保存一个字段(数字或文本),则可以根据无线电选择状态(平凡的js)隐藏/显示这两个字段。

为了防止保存这两个值,而不是在表单的清理中,您可以检查是否只填充了一个字段,并且一个字段是否与无线电选择兼容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5403323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档