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 '''
    }
}

问题是:

  1. 如何理解它与 lazy_loadFalseTrue 的行为如此不同。
  2. lazy_load=True 时,如何通过简单地给我 project_id: 1.
  3. 来删除响应中的项目信息

感谢您的宝贵时间!

这是我的发现。

model_to_dict () 接受参数 recurse 以指示是否应递归外键。您可以在 document.

中找到它
user = User.create(username='charlie')
model_to_dict(user, recurse=False)

在这种情况下,上述项目信息不会被递归。