marshmallow - 如果 foreign_key 不是 int,include_fk 失败
marshmallow - include_fk fail if foreign_key is not int
在使用 sql-alchemy 和 marshmallow 序列化相关数据库实体时,我遇到了以下问题:
在转储此模式时,调试器会引发 ValueError
消息
self._serialize(d, many=False)
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
return self._serialize(value, attr, obj, **kwargs)
ret = self._format_num(value) # type: _T
return self.num_type(value)
ValueError: invalid literal for int() with base 10: 'sub'
库似乎试图将密钥转换为整数。出于可读性原因,在这种情况下,键是一个字符串,因此转换显然失败了。
是否有一个标志可以避免使用 foreign_key?
参考型号如下:
ParentClass
class Operation(db.Model):
__tablename__ = "operation"
key = db.Column(db.String(64), primary_key=True)
label = db.Column(db.String(128), nullable=False)
rules = db.relationship('app.models.rule.Rule', backref="operation")
Child Class
class Rule(db.Model):
__tablename__ = 'rule'
id = db.Column(db.Integer, primary_key=True, autoincrement="auto")
operation_key = db.Column(db.Integer, ForeignKey('operation.key'))
class RuleSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Rule
include_fk = True
找到解决方法。添加具有模式唯一条件的嵌套字段。 Api。序列化的 json 将外键嵌套到一个对象中。 'operation': {'key': 'sub'}
class RuleSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Rule
# include_fk = True
operation = ma.Nested(OperationSchema, only=('key',))
在使用 sql-alchemy 和 marshmallow 序列化相关数据库实体时,我遇到了以下问题:
在转储此模式时,调试器会引发 ValueError
消息
self._serialize(d, many=False)
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
return self._serialize(value, attr, obj, **kwargs)
ret = self._format_num(value) # type: _T
return self.num_type(value)
ValueError: invalid literal for int() with base 10: 'sub'
库似乎试图将密钥转换为整数。出于可读性原因,在这种情况下,键是一个字符串,因此转换显然失败了。 是否有一个标志可以避免使用 foreign_key?
参考型号如下: ParentClass
class Operation(db.Model):
__tablename__ = "operation"
key = db.Column(db.String(64), primary_key=True)
label = db.Column(db.String(128), nullable=False)
rules = db.relationship('app.models.rule.Rule', backref="operation")
Child Class
class Rule(db.Model):
__tablename__ = 'rule'
id = db.Column(db.Integer, primary_key=True, autoincrement="auto")
operation_key = db.Column(db.Integer, ForeignKey('operation.key'))
class RuleSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Rule
include_fk = True
找到解决方法。添加具有模式唯一条件的嵌套字段。 Api。序列化的 json 将外键嵌套到一个对象中。 'operation': {'key': 'sub'}
class RuleSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Rule
# include_fk = True
operation = ma.Nested(OperationSchema, only=('key',))