【发布时间】:2021-06-30 09:26:23
【问题描述】:
我在我的烧瓶项目中使用 Peewee。
代码如下。
# model
class Release(Model):
created_at = DateTimeField()
project = ForeignKeyField(Project, backref='releases', lazy_load=False)
# ...
# controller
class ProjectReleaseController(Resource):
def get(self, project_id, release_id):
record = Release.get_or_none(Release.id == release_id)
logger.info(f'{record}')
return jsonify(model_to_dict(record))
# ...
api.add_resource(ProjectReleaseController, '/projects/<project_id>/releases/<release_id>')
发送GET:/projects/1/releases/2到服务器时,model_to_dict会报错
field_data = model_to_dict(
...
for field in model._meta.sorted_fields:
AttributeError: 'int' object has no attribute '_meta'
而logger.info(f'{record}) 输出2。 (???为什么???)
如果我将lazy_load=True(默认值)更改如下
project = ForeignKeyField(Project, backref='releases', lazy_load=True)
然后它会返回正确的值。
{
"created_at":"2021-06-29T18:56:28.718841",
"id":2,
"project":
{
''' quite many things '''
}
}
问题是:
- 如何理解它与
lazy_load到False或True的行为如此不同。 - 当
lazy_load=True时,如何摆脱项目信息的回复只需给我project_id: 1。
感谢您的宝贵时间!
【问题讨论】: