覆盖 Djangorest 视图集删除行为
Posted
技术标签:
【中文标题】覆盖 Djangorest 视图集删除行为【英文标题】:Overriding Djangorest ViewSets Delete Behavior 【发布时间】:2017-11-03 05:10:46 【问题描述】:我已经定义了一个这样的模型:
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
现在,我可以使用 http 方法 DELETE 调用 url:'servername/doctors/id/' 来删除医生。但是,我想覆盖此模型的删除行为。我希望,当用户删除一条记录时,它的 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')
【讨论】:
以上是关于覆盖 Djangorest 视图集删除行为的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Django REST Framework 视图集 URL 没有解析?