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)