python - if and or 运算符 django admin 模型
问题描述
我试图制作某种返回布尔值的逻辑函数“充足信息提供”。至于现在我是 python 语法的新手.. 如果有人能帮助解决这个问题,我将不胜感激,这是 django 应用程序中的模型
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
它返回True
else 返回False
。
解决方案
为了代码清晰,您可以使用all
和的组合any
:
all
True
如果可迭代的所有元素都返回,则返回True
。any
True
如果可迭代的至少一个元素返回,则返回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),
]
),
]
)
推荐阅读
- php - Phpmailer 以纯文本形式发送附件
- ruby-on-rails - Rails,渲染 to_xml 不显示模型的字段
- python - Python:解密凯撒密码
- c - 理解 GCC 依赖编译指示指令
- svg - SVG 上的转换转换不会改变
- c# - System.Not Supported exception for mocking ExecuteSQLCommand Moq Entity Framework Core
- prebid - 投标前服务器处理来自投标人的 204 响应
- servlets - 请求 JSESSIONID 和响应 JSESSIONID 应该不同吗?
- reactjs - 用 Luxon 进行单元测试:我如何模拟 .setZone('local')
- python - 如何使用所述垃圾列表从文件名中取出所有垃圾?