Проверьте множественные hasattr в том же состоянии
if hasattr(form, 'name') and hasattr(form, 'date'):
print(form.name) #'Some name' - True
print(form.date) #none - False
Это условие подтверждается как True, даже если hasattr(form, 'date')
ложно
Как правильно проверить мультипликаторы? hasattr?
6 ответов
Ты можешь использовать 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
есть для этого!
Надеюсь это поможет!
Если у вас есть более одного значения, чтобы проверить, является ли он истинным атрибутом объекта, вы можете сделать это следующим образом
if all(getattr(form, attrib) for attrib in ["name", "date"]):
....
Даже если значение атрибута False
, он по-прежнему имеет атрибут, поэтому он не дает сбоев (как вы ожидаете).
hasattr
будет только проверять, существует ли атрибут, а не его значение. Тебе нужно getattr
,
Попробуйте использовать getattr:
if getattr(form, 'name', None) and getattr(form, 'date', None):
print(name)
print(date)
getattr (form, 'name', None) - это None является значением по умолчанию, если не поле
Ваше состояние в порядке. Ваше использование переменных ниже, вероятно, нет - я думаю, что вы хотите использовать form.name
а также form.date
,
Если вы хотите проверить, существуют ли они и что их значение не None, попробуйте:
if getattr(form, 'name') is not None and getattr(form, 'date') is not None:
print(form.name)
print(form.date)