2017-08-31 8 views
0

更新時に名前が変更されたページがある場合、モデルの保存を防止しようとしています。だから私、その後モデルの保存を防止し、pre_save信号からの検証エラーを発生させる

def clean (self): 
    // if the name of the page has changed 
    raise ValidationError({'name':'Sorry you cannot change this'}) 

しかし、私は新しいインスタンス名に対してそれを比較するために、元の名前を取得することはできません(私はでき?)

:理想的には私はきれいなメソッドを使用して検証エラーを引き上げますしかし、私は()メソッドの保存モデルに伝播する信号の中からValidationErrorを調達することはできません

@receiver(pre_save, sender=Page) 
def prevent_save_if_name_same(sender,**kwargs): 
    instance = kwargs.get('instance') 
    old_model = sender.objects.get(pk=instance.id) 
    if old_model.name == instance.name: 
     // i would like to raise a validation error 

元の名前をつかむために私を可能にする信号を使用してみました。これを試してみると、Djangoのデバッグページが表示されます。期待通りに名前フィールドの隣にエラーが表示されるわけではありません。

ご迷惑をおかけして申し訳ありません。

答えて

2

あなたはOLD_NAME値を保存する__init__メソッドをオーバーライドして、clean方法では、この値を使用することができます。多くのおかげで

class MyModel(models.Model): 
    def __init__(self, *args, **kwargs): 
     super(Person, self).__init__(*args, **kwargs) 
     self._old_name = self.name 

    def clean(self): 
     if self._old_name != self.name: 
      raise ValidationError({'name':'Sorry you cannot change this'}) 
+1

- ジャンゴについて知るべきことがたくさんがあります!!! - 本当に便利に – Newfoundland

関連する問題