From cd8c9b48bcc5936d8e9842c54994f2371f96099b Mon Sep 17 00:00:00 2001 From: vicn Date: Thu, 3 Nov 2022 14:20:36 +0300 Subject: [PATCH] fix n+1 problem in save with server side defaults in pk --- ormar/models/model.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ormar/models/model.py b/ormar/models/model.py index 7ff8e6369..74dec14d8 100644 --- a/ormar/models/model.py +++ b/ormar/models/model.py @@ -91,16 +91,19 @@ async def save(self: T) -> T: expr = self.Meta.table.insert() expr = expr.values(**self_fields) + pkname = self.Meta.pkname + is_need_load_pk = True pk = await self.Meta.database.execute(expr) if pk and isinstance(pk, self.pk_type()): - setattr(self, self.Meta.pkname, pk) + setattr(self, pkname, pk) + is_need_load_pk = False self.set_save_status(True) # refresh server side defaults if any( field.server_default is not None for name, field in self.Meta.model_fields.items() - if name not in self_fields + if name not in self_fields and (is_need_load_pk or name != pkname) ): await self.load()