Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么发送删除请求会触发get_queryset()Django方法?_Django_Axios_Django Queryset_Http Delete - Fatal编程技术网

为什么发送删除请求会触发get_queryset()Django方法?

为什么发送删除请求会触发get_queryset()Django方法?,django,axios,django-queryset,http-delete,Django,Axios,Django Queryset,Http Delete,我无法将delete请求从axios发送到Django后端。使用axios我用以下方式为我的许多型号调用delete: // DELETE DAY export const deleteDay = (day_id) => (dispatch, getState) => { axios .delete(`/api/days/${day_id}/`, tokenConfig(getState)) ... tokenConfig(getState)的值仅为: {

我无法将
delete
请求从
axios
发送到Django后端。使用
axios
我用以下方式为我的许多型号调用
delete

// DELETE DAY
export const deleteDay = (day_id) => (dispatch, getState) => {
  axios
    .delete(`/api/days/${day_id}/`, tokenConfig(getState))
    ...
tokenConfig(getState)
的值仅为:

{
  headers: {
    Authorization: "Token 032b2f569037f0125753ef8f67e7774d34a756646ae28cefd54eb1c54bd0b149"
    Content-type: "application/json"
  }
}
在我的
api.py
文件中,我有许多
视图集
,它们使用预定义的
模型
序列化器
对象。应捕获此请求的
viewset
DayViewSet
。我按照指南创建了所有这些
视图集
,从我在网上找到的内容来看,我使用的指南似乎使用了函数。出于这个原因,我一直在使用诸如
perform\u create
get\u queryset
等函数

我已经能够成功地调用这个
deleteDay
函数,它将根据我提供的
day\u id
删除对象的实例,但是最近,在更改了我的
get\u queryset
函数之后,似乎出现了一个奇怪的问题。现在,当我调用
deleteDay
函数时,它会调用我的
get\u queryset
函数,而不是任何正常的函数。以下是
DayViewSet
对象:

class DayViewSet(viewsets.ModelViewSet):
    permission_classes = [
        permissions.IsAuthenticated
    ]

    serializer_class = DaySerializer

    def get_queryset(self):

        day_filter = self.request.GET.get("day_filter", None)

        if day_filter == 'last':
            all_queryset = Day.objects.all()
            ordered_all_queryset = all_queryset.order_by("-day_id")
            if ordered_all_queryset.count() == 0:
                return []
            else:
                return [ordered_all_queryset.first()]

        if day_filter == 'first':
            all_queryset = Day.objects.all()
            ordered_all_queryset = all_queryset.order_by("day_id")
            if ordered_all_queryset.count() == 0:
                return []
            else:
                return [ordered_all_queryset.first()]

        eventdefinitions = self.request.user.eventdefinitions.all()
        strictevents = StrictEvent.objects.filter(
            event_id__in=eventdefinitions)
        looseevents = LooseEvent.objects.filter(event_id__in=eventdefinitions)
        occurs_on_1s = occurs_on_1.objects.filter(event_id__in=strictevents)
        occurs_on_2s = occurs_on_2.objects.filter(event_id__in=looseevents)
        occurs_on_s = occurs_on_1s | occurs_on_2s
        queryset = Day.objects.filter(day_id__in=occurs_on_s)

        return queryset

    def perform_create(self, serializer):
        serializer.save()

所以问题是,每当我调用
deleteDay
函数时,它总是在我的
viewset
中调用
get\u queryset
函数,我不知道为什么。我尝试添加一个
perform\u destroy
函数,希望它能覆盖删除请求,但它不会覆盖它。所以我有两个问题,为什么在我调用delete请求时会触发
get\u queryset
函数,以及如何使它触发
perform\u destroy
函数(或类似的函数)。

因为当调用delete方法时,我们必须知道将删除哪个对象。 因此,我们将modelviewset中的default
get_object
方法称为default方法。 然后
get\u object
调用
get\u queryset
因此,如果您不想在
get\u object
方法中调用
get\u qeryset
。 只需覆盖
get\u对象
,不调用
get\u queryset

阅读以获得更多的理解
因为当您调用delete方法时,我们必须知道将删除哪个对象。 因此,我们将modelviewset中的default
get_object
方法称为default方法。 然后
get\u object
调用
get\u queryset
因此,如果您不想在
get\u object
方法中调用
get\u qeryset
。 只需覆盖
get\u对象
,不调用
get\u queryset

阅读以获得更多的理解 这是有意的

DeleteView
是一种详细视图,需要使用
获取对象(…)
方法获取要删除的对象。此
获取对象(…)
将调用
获取查询集(…)
方法来获取允许在特定视图中执行的所有对象

在您的例子中,您正在覆盖
get\u queryset(…)
方法以进行筛选。您应该重写过滤器查询集(…)方法来应用过滤器。

这是有意的

DeleteView
是一种详细视图,需要使用
获取对象(…)
方法获取要删除的对象。此
获取对象(…)
将调用
获取查询集(…)
方法来获取允许在特定视图中执行的所有对象

在您的例子中,您正在覆盖
get\u queryset(…)
方法以进行筛选。您应该重写
过滤器\u queryset(…)
方法以应用过滤器