Вызов метода-модели через Django Rest Framework View - PullRequest
0 голосов
/ 23 июня 2018

У меня есть модель:

class Size(models.Model):
    size = models.DecimalField(max_digits=5, decimal_places=1)

    def plus_one(self):
        self.size += 1
        self.save()

И для этого у меня есть простой сериализатор:

class SizeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Size
        fields = '__all__'

Как я могу вызвать метод модели plus_one из моего представления, используя DRF? Как это вызывается, что является хорошей практикой для этого? Спасибо!

Добавлено:

class SizeAPIView(generics.UpdateAPIView):
    serializer_class = SizeSerializer
    queryset = Size.objects.filter()

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Это должно быть сделано на уровне сериализатора, в то время как ваш SizeAPIView остается неизменным:

class SizeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Size
        fields = '__all__'

    def update(self, instance, validated_data):

        for attr, value in validated_data.items():
            setattr(instance, attr, value)

        instance.plus_one()  # performs `instance.save` too.

Документация по сохранению экземпляров .

0 голосов
/ 23 июня 2018

Если я вас правильно понял, вам нужно будет звонить plus_one каждый раз, когда объект обновляется. В этом случае вы можете переопределить метод perform_update() следующим образом:

class SizeAPIView(generics.UpdateAPIView):
    serializer_class = SizeSerializer
    queryset = Size.objects.filter()

    def perform_update(self, serializer):
        serializer.save()
        serializer.instance.plus_one()
...