我正在使用sqlalchemy,并将UUID用作数据库(postgres)中的主键
这是我的课程:
class EntityType(db.Model):
__tablename__ = 'entity_type'
id = db.Column(UUID(as_uuid=True), primary_key=True, server_default=db.text('gen_random_uuid()'))
name = db.Column(db.Text, nullable=False)
在添加实体的表单中,用户必须选择一个实体类型,我有以下内容
class EntityAddForm(FlaskForm):
url = StringField('URL', validators=[DataRequired(),URL(require_tld=True)])
entity_type = SelectField('Entity type')
description = TextAreaField('Description')
submit = SubmitField('Add')
def validate_entity_type(self, entity_type):
entity_type = EntityType.query.filter_by(id=entity_type.data).first()
if entity_type is None:
raise ValidationError('Please select a different entity type.')
要加载表单,我有以下代码用表中的行填充selectField。
form = EntityAddForm()
form.entity_type.choices = [(et.id, et.name) for et in EntityType.query.order_by('name')]
问题是 if form.validate_on_submit()在提交时未返回True。
似乎WTForms需要使用selecter的ID来强制使用字符串/ unicode / int
有没有办法继续使用UUID类型而不是切换到整数以使selectField工作?
我尝试使用QuerySelectEntity或自定义UUID类型,但无法成功。
谢谢
答案 0 :(得分:0)
您是否尝试过将数据库转换为字符串以使其在网络上正常播放:
1
Error within p2
24-Dec-19
或
在传递到Web以在表单中使用时明确地转换数据:
def default_uuid():
return uuid.uuid4().hex
class EntityType(db.Model):
__tablename__ = 'entity_type'
id = db.Column(db.String, primary_key=True, default=default_uuid)
和
form.entity_type.choices = [(str(et.id), et.name) for et in EntityType.query.order_by('name')]