【问题标题】:Django - how to know in clean method if the form-data is new or if old data is being changedDjango - 如何在干净的方法中知道表单数据是新的还是旧数据正在更改
【发布时间】:2011-11-03 14:42:42
【问题描述】:

如何在 MyForm.clean() 中知道数据是否是新的,或者是否正在修改已保存的数据?

is_this_new_data() 在下面的代码中应该是什么样子?

class MyForm(forms.ModelForm):
    def clean(self):
        cleaned_data = self.cleaned_data
        if is_this_new_data(self):
            # perform some checks if this is new data
        else:
            # do nothing if this is data being modifed
            return cleaned_data

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    检查self.cleaned_data['some_field']self.instance.some_field

    检查对象是否为新对象的一种快速方法是查看self.instance.pk 是否具有值。除非对象已经存在,否则它将是 None

    【讨论】:

    • 谢谢克里斯,这很有效。我很惊讶 Django 文档中没有提到这一点。我浏览了文档并在没有运气的情况下查询了谷歌。
    • 我相信如果您使用 uuid 作为您的 id(或其他一些不是由数据库生成的 id 类型),这将不起作用,因为 id 是在对象初始化时创建的,而不是数据库行创建时间。
    【解决方案2】:

    clean 中,您可以访问changed_data 属性,该属性是已更改字段名称的列表。

    def clean(self):
        cleaned_data = self.cleaned_data:
        for field_name in self.changed_data:
            # loop through the fields which have changed
            print "field %s has changed. new value %s" % (field_name, cleaned_data[field_name])
            do_something()
        return cleaned_data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 2018-11-22
      相关资源
      最近更新 更多