2017-02-12 3 views
0

Ich benutze Django, um eine Webanwendung zu schreiben, und möchte wissen, ob es möglich ist, ein BooleschesFeld innerhalb eines Modells zu haben, für das der Wert basiert BooleanFields im selben Modell.Python - Django - Modell BooleschesFeld von anderem BooleschenFeld im selben Modell

Grundsätzlich möchte ich ein BooleanField im Modell nur True, wenn alle anderen BooleanFields im Modell True sind.

Zum Beispiel mit dem Modell unter:

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

Ich würde booleanA gerne um wahr zu sein, nur wenn booleanB und booleanC und booleanD wahr ist.

Ich habe keine Informationen darüber gefunden, so wäre es toll, wenn jemand wüsste, ob es eine Lösung dafür gibt.

Danke.

Antwort

0

Sie können die Speichermethode Ihres Modells überschreiben.

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

stattdessen die kwargs in speichern zugeben, tun 'def speichern (self, * args, ** kwargs)' dann rufen die Eltern mit ihnen sparen 'Super (ModelEx, Selbst-) .save (* args, * * kwargs) ' –

+1

Auch' True' + 'True' +' True' ist 3 nicht 'True'. Wenn z.B. 'booleanD' war' False', dann 'booleanA' wäre 2. Verwenden Sie' self.booleanB und self.booleanC und self.booleanD' anstelle von –

+0

Dank solch scharfen Augen. –

0

Sie können die Speichermethode des Modells überschreiben. Es wird so sein.

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

Hallo Shivam, vielen Dank für Ihre Antwort. Das ist richtig, aber die Antwort wurde bereits gegeben, also habe ich die erste als die richtige markiert. – RobinW2