【发布时间】:2017-05-19 20:54:55
【问题描述】:
我有以下代码:
class Company(enum.Enum):
EnterMedia = 'EnterMedia'
WhalesMedia = 'WhalesMedia'
@classmethod
def choices(cls):
return [(choice.name, choice.name) for choice in cls]
@classmethod
def coerce(cls, item):
print "Coerce", item, type(item)
if item == 'WhalesMedia':
return Company.WhalesMedia
elif item == 'EnterMedia':
return Company.EnterMedia
else:
raise ValueError
这是我的 wtform 字段:
company = SelectField("Company", choices=Company.choices(), coerce=Company.coerce)
这是在我的表单中生成的 html:
<select class="" id="company" name="company" with_label="">
<option value="EnterMedia">EnterMedia</option>
<option value="WhalesMedia">WhalesMedia</option>
</select>
不知何故,当我点击提交时,我不断收到“Not a Valid Choice”。
有什么想法吗?
这是我的终端输出:
当我查看终端时,我看到以下内容:
Coerce None <type 'NoneType'>
Coerce EnterMedia <type 'unicode'>
Coerce EnterMedia <type 'str'>
Coerce WhalesMedia <type 'str'>
【问题讨论】:
-
您可以简单地通过索引枚举将字符串名称映射到对象(强制):
Company["EnterMedia"]产生Company.EnterMedia。您可以使用coerce=Company.__getitem__。对于值,调用也有效,所以coerce=Company。请参阅Programmatic access。您的名称和值匹配,因此您可以在此处使用。
标签: python flask enums wtforms