Django:如何覆盖 form.save()?

Posted

技术标签:

【中文标题】Django:如何覆盖 form.save()?【英文标题】:Django: How to override form.save()? 【发布时间】:2011-04-25 01:07:43 【问题描述】:

我的模型有很多布尔字段。我已将它们分成 3 组,我将它们呈现为 MultipleChoiceField 和修改后的 CheckboxSelectMultiple

现在我需要将此数据保存回数据库。即,我需要将单个小部件返回的数据拆分为多个布尔列。我认为这适合save() 方法,否?

问题是,我该怎么做?像这样?

def save(self, commit=True):
    # code here
    return super(MyForm, self).save(commit)

如果是这样... 如何设置这些值?

self.fields['my_field'].value = 'my_flag' in self.cleaned_data['multi_choice']

还是什么? 所有数据都存储在哪里?

【问题讨论】:

或者如果我只是修改cleaned_data,这个应该进入clean... 【参考方案1】:

您希望存储数据的位置是您的新模型实例:

def save(self, commit=True):
    instance = super(MyForm, self).save(commit=False)
    instance.flag1 = 'flag1' in self.cleaned_data['multi_choice'] # etc
    if commit:
        instance.save()
    return instance

【讨论】:

别忘了致电self.is_valid()。否则,self.cleaned_data 不会被设置。 @Visores,不,您不需要这样做。 super().save 为你做。

以上是关于Django:如何覆盖 form.save()?的主要内容,如果未能解决你的问题,请参考以下文章

django:如何只访问form.errors中的第一条错误消息?

表单对象没有属性“save_m2m”django

django summernote没有显示

在 django 中保存对象列表

如何关闭弹出窗口并重定向到Django View中的另一个页面?

在HTML+CSS中如何实现上一个div覆盖下一个div的border-top部分?