使用带有除pk之外的某些参数的destroy()

时间:2015-11-24 18:28:57

标签: python django django-rest-framework

TLDR - >是否可以使用某些参数而不是pk来destroy()数据库中的项目?

我在DRF应用程序中使用ViewSet。我对destroy() - 一些查询集项感兴趣。我想避免使用pk,我可以这样做吗?我的近似模型/方法如下。

class MyAwesomeMode(models.Model):
  awesome_field = models.CharField(max_length = 256)
  # some other fields

现在,我的目的是destroy() Queryset元素,而不使用pk并使用awesome_field。我的ViewSet需要做什么?

1 个答案:

答案 0 :(得分:0)

由于您使用ViewSet并且该类来自ViewSetMixinviews.APIView,因此.destroy()方法不可用。

您需要从DestroyModelMixin延伸才能使用.destroy()方法。

关于您的问题,请先查看.destroy()源代码:

def destroy(self, request, *args, **kwargs):
    instance = self.get_object()  # Here is getting the object!
    self.perform_destroy(instance)
    return Response(status=status.HTTP_204_NO_CONTENT)

因此,假设您在请求中提供了unique_name个参数,您可以覆盖.get_object()方法:

class MyView(ViewSet, DestroyModelMixin):

    def get_object(self):
        return MyModel.objects.get(unique_name=request.data.get('unique_name'))

然后,当.destroy()调用self.get_object()时,您将使用您的方法,根据假想的unique_name字段获取对象,而不是pk