Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Django-Model BooleanField依赖于同一模型中的其他BooleanField_Python_Django_Boolean_Models - Fatal编程技术网

Python-Django-Model BooleanField依赖于同一模型中的其他BooleanField

Python-Django-Model BooleanField依赖于同一模型中的其他BooleanField,python,django,boolean,models,Python,Django,Boolean,Models,我正在使用Django编写一个web应用程序,我想知道是否有可能在一个模型中有一个BooleanField,其值将基于同一模型中的其他BooleanField 基本上,我希望模型中的一个BooleanField为True,前提是模型中的所有其他BooleanField为True 例如,使用以下模型: class ModelEx(models.Model): booleanA = models.BooleanField(default=False) booleanB = models.

我正在使用Django编写一个web应用程序,我想知道是否有可能在一个模型中有一个BooleanField,其值将基于同一模型中的其他BooleanField

基本上,我希望模型中的一个BooleanField为True,前提是模型中的所有其他BooleanField为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是真的

我还没有找到任何关于这方面的信息,所以如果有人知道是否有解决方案,那就太好了


谢谢。

您可以覆盖模型的保存方法

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)

可以替代模型的保存方法。会是这样的

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

不要在save中传递kwargs,而是执行
def save(self,*args,**kwargs)
然后调用父级的save(super,ModelEx,self)。save(*args,**kwargs)另外,
True
+
+
True
不是3
True
。如果例如
booleanD
False
,则
booleanA
为2。不要使用self.booleanB和self.booleanC和self.booleanD
谢谢你这么敏锐的眼睛。谢谢大家的评论@我会验证你的答案,因为它确实把我带向了正确的方向。埃文斯·穆里希的评论确实是正确的,因此也要感谢你给出了准确的答案。不过我还有一个问题。当直接从DB接口修改数据时,将所有字段更改为true不会将字段A更改为true(即使在视图函数触发更改时,它也能正常工作)。你知道为什么吗?嗨,希瓦姆,非常感谢你的回答。这是正确的,但是已经提供了答案,所以我将第一个标记为正确答案。