if hasattr(form, 'name') and hasattr(form, 'date'):
print(form.name) #'Some name' - True
print(form.date) #none - False
この条件は、hasattr(form, 'date')
が false であっても True として検証されます。
複数を検証する正しい方法は何ですか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
です。
オブジェクトの真の属性であるかどうかを確認する値が複数ある場合は、次のようにすることができます
if all(getattr(form, attrib) for attrib in ["name", "date"]):
....
getattr を使用してみてください:
if getattr(form, 'name', None) and getattr(form, 'date', None):
print(name)
print(date)
getattr(form, 'name', None) - フィールドでない場合、この None がデフォルト値です
あなたの状態は大丈夫です。以下の変数の使用はおそらくそうではありません.andを使用するつもりだと思い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)