2017-02-12 2 views
0

Я использую Django для написания веб-приложения и хотел бы знать, возможно ли иметь BooleanField в модели, значение которой будет основано на других BooleanFields в той же модели.Python - Django - модель BooleanField зависит от другого BooleanField в той же модели

В принципе, я бы хотел, чтобы один BooleanField в модели был True, только если все остальные BooleanFields в модели 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) 

Я хотел booleanA, чтобы быть правдой, только если booleanB и booleanC и booleanD истинны.

Я не нашел никакой информации об этом, поэтому было бы здорово, если бы кто-нибудь знал, есть ли решение для этого.

Спасибо.

ответ

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

вместо прохождения kwargs Сохранить, сделать определение функции сохранения (самостоятельно, * арг ** kwargs) 'затем вызвать родителя сохранить с ними' супер (ModelEx, самость) .save (* арг, * * kwargs) ' –

+1

Кроме того,' True' + 'True' +' True' не 3, а 'True'. Если, например, 'booleanD' был' False', тогда 'booleanA' будет 2. Используйте' self.booleanB и self.booleanC и self.booleanD' вместо –

+0

Спасибо, такие острые глаза. –

0

Вы можете переопределить метод сохранения модели. Это будет так.

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

Привет, шивам, большое спасибо за ваш ответ. Это правильно, но ответ уже был предоставлен, поэтому я обозначил первый как правильный. – RobinW2

Смежные вопросы