Я новичок в работе с Django Rest API, поэтому у меня проблема с обновлением. Когда я сохраняю экземпляр, я просто вызываю метод save экземпляра сериализатора. Но когда я обновляю экземпляр сериализатора по его идентификатору, я должен предоставить экземпляр для обновления метода. Сейчас у меня другой вопрос. Из-за Django rest API docs
class UpdateModelMixin:
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# forcibly invalidate the prefetch cache on the instance.
instance._prefetched_objects_cache = {}
return Response(serializer.data)
def perform_update(self, serializer):
serializer.save()
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
Всегда ли он получает экземпляр из БД (например, этот запрос SELECT *FROM Table1 WHERE id=1
) при обновлении экземпляра? И он копирует все поля одно за другим из-за этого docs . Если это работает, выполняет ли он два запроса при обновлении экземпляра? И еще одна проблема в том, что если у моделей есть вложенные поля.
Подскажите, пожалуйста, еще один вариант решения этой проблемы. Я считаю, что один из способов решить эту проблему - использовать обычные SQL запросы, но мне это не нравится.