@@ -170,6 +170,26 @@ def dispatch(self, request, *args, **kwargs):
170170
171171 # Creates
172172
173+ def create (self , request , * args , ** kwargs ):
174+ serializer = self .get_serializer (data = request .data )
175+ serializer .is_valid (raise_exception = True )
176+ bulk_create = getattr (serializer , 'many' , False )
177+ self .perform_create (serializer )
178+
179+ # After creating the instance(s), re-initialize the serializer with a queryset
180+ # to ensure related objects are prefetched.
181+ if bulk_create :
182+ instance_pks = [obj .pk for obj in serializer .instance ]
183+ qs = self .get_queryset ().filter (pk__in = instance_pks ).order_by ('pk' )
184+ else :
185+ qs = self .get_queryset ().get (pk = serializer .instance .pk )
186+
187+ # Re-serialize the instance(s) with prefetched data
188+ serializer = self .get_serializer (qs , many = bulk_create )
189+
190+ headers = self .get_success_headers (serializer .data )
191+ return Response (serializer .data , status = status .HTTP_201_CREATED , headers = headers )
192+
173193 def perform_create (self , serializer ):
174194 model = self .queryset .model
175195 logger = logging .getLogger (f'netbox.api.views.{ self .__class__ .__name__ } ' )
@@ -186,9 +206,20 @@ def perform_create(self, serializer):
186206 # Updates
187207
188208 def update (self , request , * args , ** kwargs ):
189- # Hotwire get_object() to ensure we save a pre-change snapshot
190- self .get_object = self .get_object_with_snapshot
191- return super ().update (request , * args , ** kwargs )
209+ partial = kwargs .pop ('partial' , False )
210+ instance = self .get_object_with_snapshot ()
211+ serializer = self .get_serializer (instance , data = request .data , partial = partial )
212+ serializer .is_valid (raise_exception = True )
213+ self .perform_update (serializer )
214+
215+ # After updating the instance, re-initialize the serializer with a queryset
216+ # to ensure related objects are prefetched.
217+ qs = self .get_queryset ().get (pk = serializer .instance .pk )
218+
219+ # Re-serialize the instance(s) with prefetched data
220+ serializer = self .get_serializer (qs )
221+
222+ return Response (serializer .data )
192223
193224 def perform_update (self , serializer ):
194225 model = self .queryset .model
0 commit comments