带有 UUID 的 Flask-WTF 选择域
Flask-WTF selectfield with UUID
我正在使用 sqlalchemy 并在我的数据库 (postgres) 中使用 UUID 作为主键
这是我的 class:
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.')
为了加载表单,我使用以下代码用 table.
的行填充 selectField
form = EntityAddForm()
form.entity_type.choices = [(et.id, et.name) for et in EntityType.query.order_by('name')]
问题是 if form.validate_on_submit(): 在提交时 return 不正确。
似乎 WTForms 需要一个 string/unicode/int 对 selectField
的 id 使用强制
有没有办法继续使用 UUID 类型而不是切换到整数来让 selectField 工作?
我尝试使用 QuerySelectEntity 或自定义 UUID 类型,但未能成功。
谢谢
您是否尝试过将您的数据库转换为字符串以使其在网络上表现良好:
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.')
我正在使用 sqlalchemy 并在我的数据库 (postgres) 中使用 UUID 作为主键
这是我的 class:
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.')
为了加载表单,我使用以下代码用 table.
的行填充 selectField form = EntityAddForm()
form.entity_type.choices = [(et.id, et.name) for et in EntityType.query.order_by('name')]
问题是 if form.validate_on_submit(): 在提交时 return 不正确。
似乎 WTForms 需要一个 string/unicode/int 对 selectField
的 id 使用强制有没有办法继续使用 UUID 类型而不是切换到整数来让 selectField 工作?
我尝试使用 QuerySelectEntity 或自定义 UUID 类型,但未能成功。
谢谢
您是否尝试过将您的数据库转换为字符串以使其在网络上表现良好:
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.')