@@ -87,13 +87,18 @@ def __init__(self, instance: "CRUDModel"):
87
87
self ._props = {}
88
88
self ._literal = True
89
89
self ._locator = None
90
- if instance .__table__ is not None :
90
+
91
+ @property
92
+ def locator (self ):
93
+ if self ._locator is None and self ._instance .__table__ is not None :
91
94
try :
92
- self ._locator = instance .lookup ()
95
+ self ._locator = self . _instance .lookup ()
93
96
except LookupError :
94
97
# apply() will fail anyway, but still allow update()
95
98
pass
96
99
100
+ return self ._locator
101
+
97
102
def _set (self , key , value ):
98
103
self ._values [key ] = value
99
104
@@ -116,7 +121,7 @@ async def apply(self, bind=None, timeout=DEFAULT):
116
121
:return: ``self`` for chaining calls.
117
122
118
123
"""
119
- if self ._locator is None :
124
+ if self .locator is None :
120
125
raise TypeError (
121
126
"Model {} has no table, primary key or custom lookup()" .format (
122
127
self ._instance .__class__ .__name__
@@ -167,7 +172,7 @@ async def apply(self, bind=None, timeout=DEFAULT):
167
172
clause = (
168
173
type (self ._instance )
169
174
.update .where (
170
- self ._locator ,
175
+ self .locator ,
171
176
)
172
177
.values (
173
178
** self ._instance ._get_sa_values (values ),
@@ -435,7 +440,8 @@ class CRUDModel(Model):
435
440
def __init__ (self , ** values ):
436
441
super ().__init__ ()
437
442
self .__profile__ = None
438
- self ._update_request_cls (self ).update (** values )
443
+ if values :
444
+ self ._update_request_cls (self ).update (** values )
439
445
440
446
@classmethod
441
447
def _init_table (cls , sub_cls ):
0 commit comments