私のPython Flaskアプリケーションは、ビルドされたPython EnumサポートでWTFormsを使用しています。 SelectFieldにEnumのすべての値が入力されるフォーム(POST)を送信しようとしています。Python Flask WTForm SelectField Enumの値が有効な選択肢ではありません
「送信」を押すと、「有効な選択ではありません」というエラーが表示されます。これは、入力フォームの値をチェックするとき、フォームには、提供されたEnum値のリストから有効な選択肢が含まれているように見えるので、これは奇妙に思えます。
私はそうのようにフォーマットされAJBEnum
という名前のEnumのサブクラスを使用しています:
class UserRole(AJBEnum):
admin = 0
recipient = 1
私はプロジェクトを通じて多くの列挙型を使用しているため、これを行うことを選んだと、すべての収集ヘルパー関数を書きたかったです選択と書式WTForm SelectFieldタプルフレンドリー。 AJBEnumはそうのようにフォーマットされています。私はそうのようなSelectFieldの作成時にWTFormsにUserRole
のためのすべての選択肢を与えることができることを意味
class AJBEnum(Enum):
@classmethod
def choices(cls, blank=True):
choices = []
if blank == True:
choices += [("", "")]
choices += [(choice, choice.desc()) for choice in cls]
return choices
:
role = SelectField('Role', choices=UserRole.choices(blank=False), default=UserRole.recipient)
注意を関数パラメータblank
は空白の追加を提供しますSelectFieldがオプションの場合は、SelectFieldオプションを使用します。この場合、そうではありません。私は送信ボタンを押すと
は、私は私のルートで入ってくる着信要求をチェックし、form.data
を印刷することで、私は、このコンテンツを与えている:あなたが見ることができるように
{'email': '[email protected]', 'password': 'fake', 'plan': 'A', 'confirm': 'fake', 'submit': True, 'id': None, 'role': 'UserRole.recipient'}
は、それがのUserRoleを文字列化たWTFormsを表示されます。受信者。受信したPOST要求値を意図したEnum値に変換することにWTFormsを強制する方法はありますか?