为什么发送删除请求会触发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中的defaultget_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(…)
方法以应用过滤器