2016-10-24 1 views
1

私は2つの整数列を持ち、行内で同じ値を持たないように制限します。たとえば、Djangoを使用して2つの列を同じ値にしないように制限する方法はありますか?

第1行と第2行は問題ありませんが、第3行は存在してはいけません。 この制限をDjangoモデルに追加するには?ユーザーは何が悪かったのか上の任意のフィードバックを得るのdoesntとセーブキャンセルすることになる可能性がありますので、それはお勧めできません

class MyModel(models.Model): 
    type1 = models.IntegerField() 
    type2 = models.IntegerField() 

    def save(self, *args, **kwargs):   
     if self.type1 != self.type2: 
      return super().save(*args, **kwargs) 
     else: 
      return # cancel the save - which isn't recommended 

:モデルにで行う

+0

私の前のリンクを無視して、私はこれがあなたが求めていると思います。http://stackoverflow.com/questions/2281179/adding-extra-constraints-into-fields-in-django – serg

答えて

1

はお勧めできません/醜いです、あなたのような何かが必要になります間違った行動。 (シグナル、リダイレクトなどが失敗する可能性があります)

可能であれば、フォームの検証としてお勧めします。

class MyForm(forms.Form): 
    type1 = forms.IntegerField() 
    type2 = forms.IntegerField() 

    def clean(self): 
     cleaned_data = super().clean() 
     if cleaned_data['type1'] == cleaned_data['type2']: 
      raise forms.ValidationError("Type1 and Type2 need to be different") 

EDIT 1:インデントを修正します。

EDIT 2:フォーム検証の例を追加しました。

編集3:推奨されない理由の詳細を追加しました。

編集4:誤って読み取られた、回答が更新されました。

関連する問題