我需要检查一些条件,并做一个过滤器或搜索,如果条件是指定的。我是这样做的:
def or_q_if_truthfull(**kwargs):
filtered = [Q(**{k: v}) for k, v in kwargs.items() if v]
if filtered:
return reduce(or_,filtered)
else:
return Q()
def check():
if age.isdigit():
my_q = or_q_if_truthfull(
name__lower__contains=name.lower(),
age=age,
mobile__contains=phone,
email__lower__contains=email.lower(),
address__lower__contains=address.lower(),
city__lower__contains=city.lower(),
)
else:
my_q = or_q_if_truthfull(
name__lower__contains=name.lower(),
mobile__contains=phone,
email__lower__contains=email.lower(),
address__lower__contains=address.lower(),
city__lower__contains=city.lower(),
)
我试着把if和else组合成一个块:
方法1:
my_q = or_q_if_truthfull(
name__lower__contains=name.lower(),
age=age if age.isdigit(),
mobile__contains=mobile,
alternate__contains=alternate,
email__lower__contains=email.lower() if email else email,
address__lower__contains=address.lower(),
city__lower__contains=city.lower(),
)
File "/home/joel/myappointments/clinic/views.py", line 97
age=age if age.isdigit(),
^
SyntaxError: invalid syntax
然后我尝试了这个:
方法2:
from numbers import Number
my_q = or_q_if_truthfull(
cstid=HospitalID,
name__lower__contains=name.lower() if name else name,
age=age if isinstance(age, Number),
mobile__contains=mobile,
alternate__contains=alternate,
email__lower__contains=email.lower() if email else email,
address__lower__contains=address.lower(),
city__lower__contains=city.lower(),
)
File "/home/joel/myappointments/clinic/views.py", line 97
age=age if isinstance(age, Number),
^
SyntaxError: invalid syntax
我试过的两种方法有什么问题?你能提出一个最低限度的解决方案吗?你知道吗
在python中,可以使用
None
关键字使变量不包含任何值。你知道吗对于合并,可以使用以下方法:
相关问题 更多 >
编程相关推荐