[英]model_to_dict: AttributeError: 'str' object has no attribute '_meta'
[英]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 '''
}
}
問題是:
lazy_load
到False
或True
行為如此不同。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.