2

我已經定義的模型是這樣的:重寫Djangorest ViewSets刪除行爲

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的其他行爲,如列表,放置,創建。

我該怎麼做?我在哪裏編寫用於覆蓋此刪除行爲的代碼?

回答

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