在模型中,我有:
class GenderEnum(enum.Enum):
man = "ﻡﺭﺩ"
woman = "ﺰﻧ"
class Users(db.Model, UserMixin):
__tablename__ = 'Users'
id = db.Column(db.Integer, primary_key=True)
# Gender
gender = db.Column(db.Enum(GenderEnum), unique=False, default="man")
然后,我尝试为mode_form
方法定义一个自定义转换器,该方法提取枚举值作为用于在WTForm中显示字段的标签
@converts('Enum')
def conv_Enum(self, column, field_args, **extra):
if 'choices' not in field_args:
field_args['choices'] = [(e, e) for e in column.type.enums]
assert False, field_args["choices"]
return f.SelectField(**field_args)
但是,我不知道如何访问这里的值(مرد,ن)来填充choices
的(key,value)
1条答案
按热度按时间xu3bshqb1#
(第一部分:我的个人意见)
为什么您无论如何都不能访问它们:
当你创建一个Enum列时,数据库(和模型)的该列的已知值将被设置为等于Enum变量的 name(常量变量的名称,而不是它们的值)。因此,Enum列知道Enum变量的值没有任何意义,因为首先,您试图将
(مرد , زن)
转换为(woman, man)
。解决方法
我这样做的方式如下:
1.在模型类的内部定义枚举类。
1.使用
column.class_.GenderEnum
访问Enum类所以你的重构代码应该是:
注意,
(e.name, e.value)
将导致(man, مرد)
和(woman, زن)
。