簡體   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