gpt4 book ai didi

django - 删除相关数据后,在 DeleteView 上使用 get_success_url

转载 作者:行者123 更新时间:2023-12-04 18:09:32 24 4
gpt4 key购买 nike

在使用食谱的 Django 应用程序中,我将 DeleteView 子类化创建我的 IngredientListItemDeleteView ,但我想要 get_success_url 的结果依赖于刚刚删除的项目的属性。

我想做这样的事情:

def get_success_url(self):
item = get_object_or_404(IngredientListItem, pk=self.kwargs['pk']) # -> 404
return this_item.recipe.get_absolute_url()

我知道我收到了 404 错误,因为有问题的项目不再存在,但我没有在它被删除之前存储有关该项目的相关信息(即其包含的配方)。例如,如果我输入 get方法任何代码,如
self.success_url = get_object_or_404(IngredientListItem, 
pk=self.kwargs['pk']).recipe.get_absolute_url()

那么到时候 success_url被查看(删除后),它的值为 None。

如何使我的成功 URL 依赖于已删除项目的此属性?

最佳答案

在 Django 1.6 中, delete 方法已更改,以便 get_success_url在删除对象之前调用方法。

def delete(self, request, *args, **kwargs):
"""
Calls the delete() method on the fetched object and then
redirects to the success URL.
"""
self.object = self.get_object()
success_url = self.get_success_url()
self.object.delete()
return HttpResponseRedirect(success_url)

我建议你像上面一样覆盖你的删除方法,直到你升级到 Django 1.6。如果您需要为多个类执行此操作,则可以创建一个 mixin。

请注意,您不需要使用 get_item_or_404 从数据库中获取项目。 -- 您可以在 get_success_url 中访问它方法为 self.object .

关于django - 删除相关数据后,在 DeleteView 上使用 get_success_url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17921680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com