覆盖Djangorest ViewSets的删除行为

9

我定义了一个模型,如下:

class Doctor(models.Model):
    name = models.CharField(max_length=100)
    is_active = models.BooleanField(default=True)

我的序列化程序:
class DoctorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Doctor
        fields = ('id', 'name', )

在视图中:

class DoctorViewSet(viewsets.ModelViewSet):
    queryset = Doctor.objects.all()
    serializer_class = DoctorSerializer

现在,我可以通过调用url:'servername/doctors/id/'并使用http方法 DELETE 来删除医生。但是,我想覆盖此模型的删除行为。我希望当用户删除记录时,其 is_active 字段设置为 false ,而不会从数据库中实际删除记录。我还希望保留Viewset的其他行为,如列表、put、create等。
我该如何做呢?在哪里编写覆盖删除行为的代码?
1个回答

22
class DoctorViewSet(viewsets.ModelViewSet):
    queryset = Doctor.objects.all()
    serializer_class = DoctorSerializer

    def destroy(self, request, *args, **kwargs):
        doctor = self.get_object()
        doctor.is_active = False
        doctor.save()
        return Response(data='delete success')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接