Python 将destroy()与pk以外的参数一起使用
TLDR-->是否可以使用某个参数而不是pk来销毁数据库中的项目 我正在DRF应用程序中使用ViewSet。我对Python 将destroy()与pk以外的参数一起使用,python,django,django-rest-framework,Python,Django,Django Rest Framework,TLDR-->是否可以使用某个参数而不是pk来销毁数据库中的项目 我正在DRF应用程序中使用ViewSet。我对destroy()-ing一些查询集项目感兴趣。我想避免使用pk,我可以这样做吗?我的近似模型/方法如下 class MyAwesomeMode(models.Model): awesome_field = models.CharField(max_length = 256) # some other fields 现在,我打算销毁()Queryset元素,而不使用pk和aw
destroy()
-ing一些查询集项目感兴趣。我想避免使用pk
,我可以这样做吗?我的近似模型/方法如下
class MyAwesomeMode(models.Model):
awesome_field = models.CharField(max_length = 256)
# some other fields
现在,我打算销毁()
Queryset元素,而不使用pk
和awesome\u字段。我需要如何处理我的ViewSet?由于您使用并且该类扩展自ViewSetMixin
和views.APIView
,因此.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)
因此,假设您在请求中提供了一个唯一的\u名称
参数,您可以覆盖.get\u object()
方法:
class MyView(ViewSet, DestroyModelMixin):
def get_object(self):
return MyModel.objects.get(unique_name=request.data.get('unique_name'))
然后,当.destroy()
调用self.get\u object()
时,您将使用您的方法,根据pk
的虚构唯一\u name
字段istead获得对象,我甚至不知道destroy()
函数从何而来。请为您的问题添加更多上下文。@ShangWang我正在我的DRF应用程序中使用ViewSet。您在此视图中使用的是什么ViewSet?有关详细信息,请随时参阅destroy()
是由提供的一种方法,用于删除可由唯一URL标识的DB条目。ViewSet.ViewSet
并向其添加list()
,retrieve()
等。这样做会使其变得不必要的复杂。我这边的解决方案很简单。我添加了lookup\u field=“my\u awesome\u field”
并将我的方法更改为destroy(self,request,my\u awesome\u field=None)
并在destroy()
@MuhammadFahadManzoor中进行了查询集过滤和删除,或者我的解决方案只是重写获取对象
,其他代码就是一个解释。您的解决方案适用于这种情况,这是一个特定的解决方案,我的解决方案可以适用于许多其他类,使用超级类中的get\u object
。我很高兴你找到了解决办法。