Django:根据特定标准拒绝模型保存

时间:2012-04-06 18:07:26

标签: python django

我有一个Django模型,非常简单:

class Person(models.Model):
    name = models.CharField(max_length=100)

如果实际名称发生更改,我想拒绝保存此模型,但我想允许更改大小写。例如:

SAM -> sAm: allowed
Sam -> SAM: allowed
Sam -> John: not allowed

如何覆盖Person模型的save()方法,以便拒绝此类编辑?特别是,我正在努力:

  1. 使用save()方法获取对象的预保存版本。
  2. 拒绝保存时,在Django管理区域内向用户显示消息。
  3. 拒绝保存时,将用户返回编辑屏幕。
  4. 随意回答问题的任何部分,并提前感谢!

2 个答案:

答案 0 :(得分:1)

This answer有两种很好的方法可以检测某个字段是否发生了变化并做了些什么。

在你的情况下你要修改它,不仅要检测一个字段是否已经改变,还要检测它是否是你想要允许的改变。

答案 1 :(得分:0)

我会在“干净”方法中使用表单和一些自定义验证:

示例:

class MyForm(ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        cleaned_data = self.cleaned_data
        name = cleaned_data.get("name ")
        if name == ###:
            #custom validition checking here
            raise forms.ValidationError('You can only capitalize.')
        return cleaned_data