Flask Babel 在插入数据库时转换为原始语言
Flask Babel convert to original language when insert to database
我有一组带有 Flask-WTF 的 SelectField,我用 Flask-Babel 转换默认语言。
这是我的代码片段:
from flask_babel import _, lazy_gettext as _l
class PaymentStatus(enum.Enum):
PENDING = _l('PENDING')
COMPLETED = _l('COMPLETED')
EXPIRED = _l('EXPIRED')
def __str__(self):
return '{}'.format(self.value)
payment_status = [(str(_l(y)), y) for y in (PaymentStatus)]
class PaymentForm(FlaskForm):
status_of_payment = SelectField(_l('Payment Status'), choices=payment_status)
# ...
# ...
这是我的模型:
class Payment(db.Model):
__tablename__ = 'payment'
id = db.Column(db.Integer, primary_key=True)
status_of_payment = db.Column(db.Enum(PaymentStatus, name='status_of_payment'))
# ...
# ...
当我尝试将 Flask-WTF 表单中的值插入到我的数据库时,出现了一些错误。
这是我如何将其插入数据库的代码片段:
if form.validate_on_submit():
payment = Payment(
# payment_status=form.status_of_payment.data
payment_status=PaymentStatus.PENDING.value
# ...
# ...
)
enum
PENDING
的值也在我的浏览器上转换为首选语言的语言,所以我收到此错误消息:
sqlalchemy.exc.StatementError: (builtins.LookupError) "MENGUNGGU" is
not among the defined enum values
了解更多信息:"MENGUNGGU" = 英语 "PENDING" 是印度尼西亚语。
所以这里的问题是,当我插入 SelectField
值时,它还会将语言转换为我首选的浏览器语言,而我的数据库是 PostgreSQL 块它,因为我没有在我的枚举类型上定义值。
所以,我的问题是,当我们想将值插入数据库时,我们可以从 Flask-Babel 中排除 i18n 和 l10n 值吗?,或者我应该怎么做才能面对这个..?
您应该在选择中交换值,因为元组中的第一个元素是将要提交的实际值,第二个元素是演示文稿:
payment_status = [(y.name, _l(str(y.value))) for y in PaymentStatus]
多亏了这个,您将提交翻译后的名称和正确的值。
枚举的名称应该存储在您的数据库中而不是值。
我有一组带有 Flask-WTF 的 SelectField,我用 Flask-Babel 转换默认语言。
这是我的代码片段:
from flask_babel import _, lazy_gettext as _l
class PaymentStatus(enum.Enum):
PENDING = _l('PENDING')
COMPLETED = _l('COMPLETED')
EXPIRED = _l('EXPIRED')
def __str__(self):
return '{}'.format(self.value)
payment_status = [(str(_l(y)), y) for y in (PaymentStatus)]
class PaymentForm(FlaskForm):
status_of_payment = SelectField(_l('Payment Status'), choices=payment_status)
# ...
# ...
这是我的模型:
class Payment(db.Model):
__tablename__ = 'payment'
id = db.Column(db.Integer, primary_key=True)
status_of_payment = db.Column(db.Enum(PaymentStatus, name='status_of_payment'))
# ...
# ...
当我尝试将 Flask-WTF 表单中的值插入到我的数据库时,出现了一些错误。
这是我如何将其插入数据库的代码片段:
if form.validate_on_submit():
payment = Payment(
# payment_status=form.status_of_payment.data
payment_status=PaymentStatus.PENDING.value
# ...
# ...
)
enum
PENDING
的值也在我的浏览器上转换为首选语言的语言,所以我收到此错误消息:
sqlalchemy.exc.StatementError: (builtins.LookupError) "MENGUNGGU" is not among the defined enum values
了解更多信息:"MENGUNGGU" = 英语 "PENDING" 是印度尼西亚语。
所以这里的问题是,当我插入 SelectField
值时,它还会将语言转换为我首选的浏览器语言,而我的数据库是 PostgreSQL 块它,因为我没有在我的枚举类型上定义值。
所以,我的问题是,当我们想将值插入数据库时,我们可以从 Flask-Babel 中排除 i18n 和 l10n 值吗?,或者我应该怎么做才能面对这个..?
您应该在选择中交换值,因为元组中的第一个元素是将要提交的实际值,第二个元素是演示文稿:
payment_status = [(y.name, _l(str(y.value))) for y in PaymentStatus]
多亏了这个,您将提交翻译后的名称和正确的值。
枚举的名称应该存储在您的数据库中而不是值。