Reputation: 161
if hasattr(form, 'name') and hasattr(form, 'date'):
print(form.name) #'Some name' - True
print(form.date) #none - False
This condition validates as True even if the hasattr(form, 'date')
is false.
What is the correct way to validate multiples hasattr?
Upvotes: 6
Views: 6708
Reputation: 82470
You can use all
if all(hasattr(form, attr) for attr in ["name", "date"])
Upvotes: 19
Reputation: 31260
Your condition is fine. Your use of the variables below probably isn't -- I think you mean to use form.name
and form.date
.
If you want to check whether they exist and that their value isn't None, try:
if getattr(form, 'name') is not None and getattr(form, 'date') is not None:
print(form.name)
print(form.date)
Upvotes: 0
Reputation: 1082
Try use getattr:
if getattr(form, 'name', None) and getattr(form, 'date', None):
print(name)
print(date)
getattr(form, 'name', None) - this None is default value, if not field
Upvotes: 0
Reputation: 28292
What you're looking is probably not hasattr
, but getattr
.
if getattr(form, 'name') and getattr(form, 'date'):
As hasattr
will check if form
has the attribute name
. It will check if form.name
exists, not getting the value of form.name
. And getattr
is there for that!
Hope this helps!
Upvotes: 2
Reputation: 174624
Even if the value of the attribute is False
, it still has the attribute which is why it is not failing (as you are expecting it to).
hasattr
will only check if the attribute exists, not what its value is. You need getattr
.
Upvotes: 1
Reputation: 239473
If you have more than one value to check if it is a truthy attribute of an object, you can do like this
if all(getattr(form, attrib) for attrib in ["name", "date"]):
....
Upvotes: 2