Skip to main content
 首页 » 编程设计

python之覆盖 Django Rest ViewSets 删除行为

2024年10月01日39lhb25

我定义了这样一个模型:

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', ) 

在 View 中:

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

现在,我可以通过调用 url 删除医生:'servername/doctors/id/',使用 http 方法 DELETE。但是,我想覆盖此模型的删除行为。我希望,当用户删除记录时,它的 is_active 字段设置为 false,而不实际从数据库中删除记录。我还想保留 Viewset 的其他行为,如列表、放置、创建等。

我该怎么做?我在哪里编写覆盖此删除行为的代码?

请您参考如下方法:

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')