11from rest_framework import fields , serializers
22
3+ from utils .deep_merge import deep_merge_data
4+
35from ...models import DatabaseRecord
46from ...serializers .mixins import TelegramBotMixin
57
@@ -14,27 +16,15 @@ def run_validation(self, data: Any = fields.empty) -> dict[str, Any]:
1416 def update (
1517 self , records : list [DatabaseRecord ], validated_data : dict [str , Any ]
1618 ) -> list [DatabaseRecord ]:
17- new_data : Any = validated_data ['data' ]
19+ new_data : Any | None = validated_data .get ('data' )
20+
21+ if new_data is None :
22+ return records
1823
1924 for record in records :
20- if self .partial :
21- data : dict [str , Any ] | list [Any ] = record .data .copy ()
22-
23- if isinstance (data , dict ):
24- data .update (
25- new_data
26- if isinstance (new_data , dict )
27- else {'new_data' : new_data }
28- )
29- elif isinstance (data , list ):
30- if isinstance (new_data , list ):
31- data .extend (new_data )
32- else :
33- data .append (new_data )
34-
35- record .data = data
36- else :
37- record .data = new_data
25+ record .data = (
26+ deep_merge_data (record .data , new_data ) if self .partial else new_data
27+ )
3828
3929 DatabaseRecord .objects .bulk_update (records , fields = ['data' ])
4030
@@ -62,7 +52,14 @@ def create(self, validated_data: dict[str, Any]) -> DatabaseRecord:
6252 def update (
6353 self , record : DatabaseRecord , validated_data : dict [str , Any ]
6454 ) -> DatabaseRecord :
65- record .data = validated_data .get ('data' , record .data )
55+ new_data : Any | None = validated_data .get ('data' )
56+
57+ if new_data is None :
58+ return record
59+
60+ record .data = (
61+ deep_merge_data (record .data , new_data ) if self .partial else new_data
62+ )
6663 record .save (update_fields = ['data' ])
6764
6865 return record
0 commit comments