model_to_dict 当 Peewee 中的 ForeignKeyField 设置 lazy_load 为 False 时引发 AttributeError
model_to_dict raise AttributeError when set lazy_load to False for ForeignKeyField in Peewee
我正在为我的烧瓶项目使用 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)
然后它将return正确的值。
{
"created_at":"2021-06-29T18:56:28.718841",
"id":2,
"project":
{
''' quite many things '''
}
}
问题是:
- 如何理解它与
lazy_load
到 False
或 True
的行为如此不同。
- 当
lazy_load=True
时,如何通过简单地给我 project_id: 1
. 来删除响应中的项目信息
感谢您的宝贵时间!
这是我的发现。
model_to_dict ()
接受参数 recurse
以指示是否应递归外键。您可以在 document.
中找到它
user = User.create(username='charlie')
model_to_dict(user, recurse=False)
在这种情况下,上述项目信息不会被递归。
我正在为我的烧瓶项目使用 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)
然后它将return正确的值。
{
"created_at":"2021-06-29T18:56:28.718841",
"id":2,
"project":
{
''' quite many things '''
}
}
问题是:
- 如何理解它与
lazy_load
到False
或True
的行为如此不同。 - 当
lazy_load=True
时,如何通过简单地给我project_id: 1
. 来删除响应中的项目信息
感谢您的宝贵时间!
这是我的发现。
model_to_dict ()
接受参数 recurse
以指示是否应递归外键。您可以在 document.
user = User.create(username='charlie')
model_to_dict(user, recurse=False)
在这种情况下,上述项目信息不会被递归。