如果和或运算符 django 管理模型
If and or operator django admin models
我正在尝试创建某种逻辑函数“sufficient_information_provided”,其中 returns 是布尔值。至于现在我是 python 语法的新手.. 如果有人能帮助解决这个问题,我将不胜感激,这是 django app
中的模型
class FamilyMember(models.Model):
transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)
family_group = models.ForeignKey(FamilyGroup,
on_delete=models.CASCADE,
null=True,
blank=True)
name = models.CharField(max_length=100, null=True, blank=True)
date_of_birth = models.DateField(null=True, blank=True)
relationship = models.ForeignKey(Relationship, on_delete=models.PROTECT)
dependant_child_age_range = models.ForeignKey(DependantChildAgeRange,
null=True,
blank=True,
on_delete=models.PROTECT)
care_percentage = models.PositiveSmallIntegerField(
null=True, blank=True, validators=[
MaxValueValidator(100),
]
)
income = models.DecimalField(max_digits=6,
decimal_places=2,
null=True,
blank=True)
这里是同一个 .py 文件夹中的函数
@property
def sufficient_information_provided(self):
b = ('Tenant', 'Partner')
if (
self.name and
self.date_of_birth and
self.relationship and(
(
self.relationship.name not in b and
self.dependant_child_age_range
) or (
self.relationship.name in b and
self.income
)
)
):
return True
return False
我想做的是:
- 当
relationship.name
不在元组中并且 dependant_age_range
不是 None
- 并且当
relationship.name
在元组中并且 self.income
不是 None
它returnsTrue
其他returnsFalse
.
here is how the admin looks.
为了代码清晰,您可以使用 all
和 any
的组合:
all
将 return True
如果 iterable return True
. 的所有元素
any
将 return True
如果 iterable returns True
. 中至少有一个元素
所以你的函数——我只是复制了算法而没有质疑它——可能看起来像:
def sufficient_information_provided(self):
b = ["Tenant", "Partner"]
return all(
[
self.name,
self.date_of_birth,
self.relationship,
any(
[
(
self.relationship.name not in b
and self.dependant_child_age_range
),
(self.relationship.name in b and self.income),
]
),
]
)
我正在尝试创建某种逻辑函数“sufficient_information_provided”,其中 returns 是布尔值。至于现在我是 python 语法的新手.. 如果有人能帮助解决这个问题,我将不胜感激,这是 django app
中的模型class FamilyMember(models.Model):
transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)
family_group = models.ForeignKey(FamilyGroup,
on_delete=models.CASCADE,
null=True,
blank=True)
name = models.CharField(max_length=100, null=True, blank=True)
date_of_birth = models.DateField(null=True, blank=True)
relationship = models.ForeignKey(Relationship, on_delete=models.PROTECT)
dependant_child_age_range = models.ForeignKey(DependantChildAgeRange,
null=True,
blank=True,
on_delete=models.PROTECT)
care_percentage = models.PositiveSmallIntegerField(
null=True, blank=True, validators=[
MaxValueValidator(100),
]
)
income = models.DecimalField(max_digits=6,
decimal_places=2,
null=True,
blank=True)
这里是同一个 .py 文件夹中的函数
@property
def sufficient_information_provided(self):
b = ('Tenant', 'Partner')
if (
self.name and
self.date_of_birth and
self.relationship and(
(
self.relationship.name not in b and
self.dependant_child_age_range
) or (
self.relationship.name in b and
self.income
)
)
):
return True
return False
我想做的是:
- 当
relationship.name
不在元组中并且dependant_age_range
不是None
- 并且当
relationship.name
在元组中并且self.income
不是None
它returnsTrue
其他returnsFalse
.
here is how the admin looks.
为了代码清晰,您可以使用 all
和 any
的组合:
all
将 returnTrue
如果 iterable returnTrue
. 的所有元素
any
将 returnTrue
如果 iterable returnsTrue
. 中至少有一个元素
所以你的函数——我只是复制了算法而没有质疑它——可能看起来像:
def sufficient_information_provided(self):
b = ["Tenant", "Partner"]
return all(
[
self.name,
self.date_of_birth,
self.relationship,
any(
[
(
self.relationship.name not in b
and self.dependant_child_age_range
),
(self.relationship.name in b and self.income),
]
),
]
)