if hasattr(form, 'name') and hasattr(form, 'date'):
print(form.name) #'Some name' - True
print(form.date) #none - False
即使hasattr(form, 'date')
为假,此条件也验证为真。
验证倍数的正确方法是什么hasattr?
您可以使用all
if all(hasattr(form, attr) for attr in ["name", "date"])
您正在寻找的可能不是hasattr
,而是getattr
。
if getattr(form, 'name') and getattr(form, 'date'):
hasattr
将检查是否具有form
属性。name
它将检查是否form.name
存在,而不是获取form.name
. 是为了那个getattr
!
希望这可以帮助!
即使该属性的值为,False
它仍然具有该属性,这就是它没有失败的原因(正如您所期望的那样)。
hasattr
只会检查属性是否存在,而不是它的值是什么。你需要getattr
.
尝试使用 getattr:
if getattr(form, 'name', None) and getattr(form, 'date', None):
print(name)
print(date)
getattr(form, 'name', None) - 这个 None 是默认值,如果不是字段
如果您有多个值来检查它是否是对象的真实属性,则可以这样做
if all(getattr(form, attrib) for attrib in ["name", "date"]):
....
你的条件很好。您对以下变量的使用可能不是-我认为您的意思是使用form.name
and form.date
。
如果您想检查它们是否存在并且它们的值不是 None,请尝试:
if getattr(form, 'name') is not None and getattr(form, 'date') is not None:
print(form.name)
print(form.date)