繁体   English   中英

Django:根据特定条件拒绝 model 保存

[英]Django: Denying model saves based on particular criteria

我有一个 Django model,非常简单:

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

如果实际名称发生变化,我想拒绝保存这个 model,但我想允许更改大写。 例如:

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

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

  1. save()方法中获取 object 的预保存版本。
  2. 当保存被拒绝时,在 Django 的管理区域内向用户显示一条消息。
  3. 当保存被拒绝时,将用户返回到编辑屏幕。

请随意单独回答问题的任何部分,在此先感谢您!

这个答案有两个很好的方法来检测一个字段是否已经改变并做一些事情。

在您的情况下,您将修改它以不仅检测字段是否已更改,还检测它是否是您想要允许的更改。

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

例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM