Python Django:基于特定条件拒绝模型保存

Python Django:基于特定条件拒绝模型保存,python,django,Python,Django,我有一个Django模型,非常简单: class Person(models.Model): name = models.CharField(max_length=100) 如果实际名称更改,我想拒绝保存此模型,但我想允许更改资本化。例如: SAM -> sAm: allowed Sam -> SAM: allowed Sam -> John: not allowed 我如何覆盖我的个人模型的save()方法,从而拒绝此类编辑?特别是,我正在努力解决以下问题: 正在

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

class Person(models.Model):
    name = models.CharField(max_length=100)
如果实际名称更改,我想拒绝保存此模型,但我想允许更改资本化。例如:

SAM -> sAm: allowed
Sam -> SAM: allowed
Sam -> John: not allowed
我如何覆盖我的个人模型的
save()
方法,从而拒绝此类编辑?特别是,我正在努力解决以下问题:

  • 正在通过
    save()
    方法访问对象的预保存版本
  • 当拒绝保存时,在Django的管理区域向用户显示消息
  • 当拒绝保存时,将用户返回编辑屏幕

  • 请自行回答问题的任何部分,并提前感谢

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

    例如:

    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
    
    有两种很好的方法可以检测字段是否已更改并执行某些操作


    在您的情况下,您需要对其进行修改,以便不仅检测字段是否已更改,而且还检测它是否是您希望允许的更改。

    这是一个很好的答案,谢谢,但我确实希望在模型级别而不是在特定的表单上强制执行此操作。谢谢,其中一个答案非常有效。您知道有什么方法可以从
    save()
    方法将一条好消息传递回用户界面吗?看起来您不能使用Django中的内置消息,因为您无权访问
    请求
    对象。@Sam
    save()
    可以在不调用
    请求
    的情况下调用,例如在Python shell中,它不是访问
    保存
    中请求的正确位置。