Django Rest Framework ModelSerializer Установить атрибут при создании

Первоначально при создании объекта я использую вошедшего в систему пользователя, чтобы назначить поле модели «владелец».

Модель:

class Account(models.Model):

    id = models.AutoField(primary_key=True)
    owner = models.ForeignKey(User)
    name = models.CharField(max_length=32, unique=True)
    description = models.CharField(max_length=250, blank=True)

Сериализатор для установки владельца:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Account
        fields = ('name', 'description')

    def restore_object(self, attrs, instance=None):
        instance = super().restore_object(attrs, instance)

        request = self.context.get('request', None)
        setattr(instance, 'owner', request.user)

        return instance

Другой пользователь в моей системе может обновить объект учетной записи другого пользователя, но право владения должно оставаться за первоначальным пользователем. Очевидно, что вышеперечисленное нарушает это, поскольку право собственности перезаписывается при обновлении текущего пользователя, вошедшего в систему.

Итак, я обновил это так:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Account
        fields = ('name', 'description')

    def restore_object(self, attrs, instance=None):
        new_instance = False
        if not instance:
            new_instance = True

        instance = super().restore_object(attrs, instance)

        # Only set the owner if this is a new instance
        if new_instance:
            request = self.context.get('request', None)
            setattr(instance, 'owner', request.user)

        return instance

Это рекомендуемый способ сделать что-то подобное? Я не вижу другого пути, но у меня пока очень ограниченный опыт.

Спасибо

Из рассмотрения ответа @ zaphod100.10. В качестве альтернативы, в коде представления (с удаленным пользовательским методом restore_object в указанном выше сериализаторе):

def post(self, request, *args, **kwargs):

    serializer = self.get_serializer(data=request.DATA, files=request.FILES)

    if serializer.is_valid():
        serializer.object.owner = request.user
        self.pre_save(serializer.object)
        self.object = serializer.save(force_insert=True)
        self.post_save(self.object, created=True)
        headers = self.get_success_headers(serializer.data)

        return Response(serializer.data, status=status.HTTP_201_CREATED,
                        headers=headers)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Ответы на вопрос(3)

Ваш ответ на вопрос