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需要做什么?
答案 0 :(得分:0)
由于您使用ViewSet并且该类来自ViewSetMixin
和views.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
。