簡體   English   中英

當 Peewee 中的 ForeignKeyField 將 lazy_load 設置為 False 時,model_to_dict 會引發 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)

然后它將返回正確的值。

{
  "created_at":"2021-06-29T18:56:28.718841",
  "id":2,
  "project":
    {
      ''' quite many things '''
    }
}

問題是:

  1. 如何理解它與lazy_loadFalseTrue行為如此不同。
  2. lazy_load=True ,如何通過簡單地給我project_id: 1來擺脫響應中的項目信息。

謝謝你的時間!

這是我發現的。

model_to_dict ()接受一個參數recurse來指示是否應該遞歸外鍵。 您可以在文檔中找到它。

user = User.create(username='charlie')
model_to_dict(user, recurse=False)

在這種情況下,上面提到的項目信息將不會被遞歸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM