【问题标题】:ModelForm and custom fieldModelForm 和自定义字段
【发布时间】:2013-02-21 20:00:06
【问题描述】:

我正在使用添加了自定义 CharField 的模型表单。我的问题是,在 POST 请求后访问自定义字段的标准方法是什么?这就是我现在的做法:

#inside ModelForm 
date = CharField(label='date', widget=Select(choices=[
        ('', '---------'),
        ('N', 'Never')
    ]))

def __init__(self, *args, **kwargs):
   self.date = args[0]['date'] #custom date CharField
   return super(MyForm, self).__init__(*args, **kwargs)

def save(self, *args, **kwargs):
# processing self.date...

有没有更好的方法来做到这一点?此外,日期字段正在使用选择作为输入数据的来源。我的猜测是,在这个特定实例中选择是正确的,构建一个表和模型,然后使用查询集来检索一些值并没有多大帮助,我猜.

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    用途:

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        date = self.fields['date']
    

    如果选择的值需要可编辑,我会将它们放在单独的模型中并使用 ModelChoiceField。否则,您只需使用静态选择即可。

    【讨论】:

    • 谢谢!但是现在还有一个问题出乎我的意料。Form在第一次创建的时候是空的,然后没有self.fields,所以这段代码失败了(我的代码也失败了,我尝试的时候使用了返回按钮,但在新页面请求时失败)。我应该测试它是否是 POST 请求,以及如何在 init 中执行此操作?
    • 听起来我需要看看你的视图和模型。
    • 没关系,我认为我可以在覆盖表单的 save() 方法中使用 self.cleaned_data['date'] 访问该字段,并且它可以工作。
    猜你喜欢
    • 2019-10-04
    • 2020-08-09
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多