0

私は信じられないほど単純なDjangoモデルを持っています:

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

実際の名前が変更された場合、このモデルの保存を拒否したいのですが、大文字の変更を許可したいと考えています。たとえば、次のようになります。

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

save()そのような編集が拒否されるように、Person モデルのメソッドをオーバーライドするにはどうすればよいですか? 特に、私は苦労しています:

  1. メソッド内のオブジェクトの保存前バージョンにアクセスしますsave()
  2. 保存が拒否されたときに、Django の管理領域内でユーザーにメッセージを表示します。
  3. 保存が拒否されたときにユーザーを編集画面に戻す。

質問のどの部分でも自由に答えてください。事前に感謝します!

4

2 に答える 2

1

この回答には、フィールドが変更されたかどうかを検出して何かを行うための 2 つの優れた方法があります。

あなたの場合、フィールドが変更されたかどうかを検出するだけでなく、それが許可したい変更であるかどうかも検出するように変更します。

于 2012-04-06T18:46:30.720 に答える
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
于 2012-04-06T18:16:27.430 に答える