具有UUID的Flask-WTF selectfield

时间:2019-12-24 13:10:13

标签: python flask sqlalchemy flask-wtforms wtforms

我正在使用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类型,但无法成功。

谢谢

1 个答案:

答案 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')]