Python 带有UUID的Flask WTF selectfield

Python 带有UUID的Flask WTF selectfield,python,flask,sqlalchemy,flask-wtforms,wtforms,Python,Flask,Sqlalchemy,Flask Wtforms,Wtforms,我正在使用sqlalchemy,并使用UUID作为数据库postgres中的主键 这是我的班级: 类EntityTypedb.Model: __tablename\uuuu='entity\u type' id=db.ColumnUUIDas\u uuid=True,primary\u key=True,server\u default=db.text'gen\u random\u uuid' name=db.Columndb.Text,null=False 在要添加实体的表单中,用户必须选择实

我正在使用sqlalchemy,并使用UUID作为数据库postgres中的主键

这是我的班级:

类EntityTypedb.Model: __tablename\uuuu='entity\u type' id=db.ColumnUUIDas\u uuid=True,primary\u key=True,server\u default=db.text'gen\u random\u uuid' name=db.Columndb.Text,null=False 在要添加实体的表单中,用户必须选择实体类型,我有以下几点

类EntityAddFormFlaskForm: url=StringField'url',验证器=[DataRequired,UrlRequired\u tld=True] 实体类型=选择字段“实体类型” description=文本区域字段'description' 提交=提交字段“添加” def验证实体类型自身,实体类型: entity\u type=EntityType.query.filter\u byid=entity\u type.data.first 如果实体类型为“无”: raise ValidationError“请选择其他实体类型。” 要加载表单,我有以下代码用表中的行填充selectField

form=EntityAddForm form.entity_type.choices=[EntityType.query.order_中et的et.id、et.name] 问题在于if form.validate_on_submit:在提交时不返回True

WTForms似乎需要一个字符串/unicode/int,并对selectField的id使用强制

有没有办法继续使用UUID类型而不是切换到integer来让selectField工作

我尝试使用QuerySelectEntity或自定义UUID类型,但未能成功


谢谢

您是否尝试过将数据库转换为字符串以使其在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)

在传递到web以便在表单中使用时明确转换数据:

form.entity_type.choices = [(str(et.id), et.name) for et in EntityType.query.order_by('name')]

def validate_entity_type(self, entity_type):
        entity_type = EntityType.query.filter_by(id=uuid.UUID(entity_type.data)).first()
        if entity_type is None:
            raise ValidationError('Please select a different entity type.')