Skip to content

Commit cdbde7f

Browse files
authored
Allow updates of nested fields (#449)
* Add key_attr to update/methods, allow duplicates * Provide default value for key_attr * Make key_attr keyword only argument * Pass key_attr as keyword argument * Do not cast id from str to integer
1 parent 9a3196c commit cdbde7f

File tree

6 files changed

+146
-48
lines changed

6 files changed

+146
-48
lines changed

strawberry_django/auth/mutations.py

+1
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def create(self, data: dict[str, Any], *, info: Info):
8989
info,
9090
model,
9191
data,
92+
key_attr=self.key_attr,
9293
full_clean=self.full_clean,
9394
pre_save_hook=lambda obj: obj.set_password(password),
9495
)

strawberry_django/mutations/fields.py

+15-4
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,18 @@ def resolver(
233233
if self.is_list:
234234
assert isinstance(data, list)
235235
return [
236-
self.create(resolvers.parse_input(info, vars(d)), info=info)
236+
self.create(
237+
resolvers.parse_input(info, vars(d), key_attr=self.key_attr),
238+
info=info,
239+
)
237240
for d in data
238241
]
239242

240243
assert not isinstance(data, list)
241244
return self.create(
242-
resolvers.parse_input(info, vars(data)) if data is not None else {},
245+
resolvers.parse_input(info, vars(data), key_attr=self.key_attr)
246+
if data is not None
247+
else {},
243248
info=info,
244249
)
245250

@@ -253,6 +258,7 @@ def create(self, data: dict[str, Any], *, info: Info):
253258
info,
254259
model,
255260
data,
261+
key_attr=self.key_attr,
256262
full_clean=self.full_clean,
257263
)
258264

@@ -306,7 +312,9 @@ def resolver(
306312
info,
307313
)
308314

309-
return self.update(info, instance, resolvers.parse_input(info, vdata))
315+
return self.update(
316+
info, instance, resolvers.parse_input(info, vdata, key_attr=self.key_attr)
317+
)
310318

311319
def update(
312320
self,
@@ -320,6 +328,7 @@ def update(
320328
info,
321329
instance,
322330
data,
331+
key_attr=self.key_attr,
323332
full_clean=self.full_clean,
324333
)
325334

@@ -365,7 +374,9 @@ def resolver(
365374
info,
366375
)
367376

368-
return self.delete(info, instance, resolvers.parse_input(info, vdata))
377+
return self.delete(
378+
info, instance, resolvers.parse_input(info, vdata, key_attr=self.key_attr)
379+
)
369380

370381
def delete(
371382
self,

0 commit comments

Comments
 (0)