2017-02-12 11 views
0

私はDjangoを使用してWebアプリケーションを作成しています。値が他の値に基づくモデル内でBooleanFieldを持つことが可能かどうかを知りたいBooleanFieldsは同じモデル内にあります。Python - Django - モデルBooleanField他のBooleanFieldに同じモデルで依存する

基本的には、モデル内の1つのBooleanFieldが、モデル内の他のすべてのBooleanFieldがTrueの場合にのみ、Trueになるようにしたいと思います。

例えば、以下のモデルで:

class ModelEx(models.Model): 
    booleanA = models.BooleanField(default=False) 
    booleanB = models.BooleanField(default=False) 
    booleanC = models.BooleanField(default=False) 
    booleanD = models.BooleanField(default=False) 

私はbooleanBとbooleanCとbooleanDがTrueである場合にのみbooleanAがTrueになりたいです。

私はこれに関する情報が見つかりませんでしたので、誰かがこれについての解決策があるかどうか知っていれば素晴らしいと思います。

ありがとうございました。

答えて

0

モデルの保存メソッドをオーバーライドできます。

class ModelEx(models.Model): 
    booleanA = models.BooleanField(default=False) 
    booleanB = models.BooleanField(default=False) 
    booleanC = models.BooleanField(default=False) 
    booleanD = models.BooleanField(default=False) 

    def save(self, *args, **kwargs): 
     self.booleanA = self.booleanA and self.booleanB and self.booleanC 
     return super(ModelEx, self).save(*args, **kwargs) 
+1

、 'デフ(自己、* argsを、** kwargsから)'、その後のは、 'スーパー(ModelEx、自己).SAVE(* argsを、*彼らとセーブ親を呼び出しを保存しません* kwargs) ' –

+1

また、' True' + 'True' +' True'は 'True'ではありません。たとえば'booleanD'が' False'だった場合、 'booleanA'は2になります。代わりに' self.booleanB and self.booleanC'とself.booleanD'を使います。 –

+0

ありがとうございました。 –

0

モデルの保存メソッドをオーバーライドできます。それはこのようなものになるでしょう。

代わりに名前を付けて保存kwargsからの通過
def save(self, *args, **kwargs): 
    self.booleanA = self.booleanB and self.booleanC and self.booleanD 
    return super(ModelEx, self).save(*args, **kwargs) 
+0

こんにちはshivam、ありがとう、あなたの答えです。これは正しいですが、答えはすでに提供されていますので、最初のものを正しいものとしてマークしました。 – RobinW2

関連する問題