You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的DeleteView中引用关联模型参数传递给get_success_url?

如何在DeleteView中引用关联模型对象的参数传递给get_success_url?

我来帮你搞定这个问题,在Django的DeleteView里获取关联模型的参数并生成跳转URL其实很直观,咱们一步步来实现:

核心思路

DeleteView在处理删除操作前,会把当前要删除的对象实例存到self.object里,所以咱们可以直接通过这个属性访问到关联的User对象,再用它来生成成功跳转的URL。

具体实现步骤

1. 定义你的DeleteView类

首先创建一个继承自DeleteView的视图,记得加上LoginRequiredMixin确保只有登录用户能访问,同时重写get_success_url方法:

from django.views.generic.edit import DeleteView
from django.urls import reverse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
from .models import EntrepreneurshipOffer

class EntrepreneurshipOfferDeleteView(LoginRequiredMixin, DeleteView):
    model = EntrepreneurshipOffer
    template_name = 'entrepreneurship/confirm_delete_offer.html'  # 替换成你的确认删除模板路径

    # 可选:验证当前用户是Offer的创建者,防止越权删除
    def get_object(self, queryset=None):
        obj = super().get_object(queryset=queryset)
        if obj.created_by != self.request.user:
            raise PermissionDenied
        return obj

    # 重写get_success_url,生成跳转到用户个人Offer列表的URL
    def get_success_url(self):
        # 从当前删除的Offer实例中获取关联的用户对象
        current_user = self.object.created_by
        # 反向解析到你的EntrepreneurshipOffersByUser视图对应的URL
        # 这里假设你的URL配置是用user_id作为参数,name为'my_entrepreneurship_offers'
        return reverse('my_entrepreneurship_offers', kwargs={'user_id': current_user.id})

2. 匹配你的URL配置

确保你的EntrepreneurshipOffersByUser视图的URL配置和上面reverse里的参数对应,比如:

# urls.py
from django.urls import path
from .views import EntrepreneurshipOffersByUser, EntrepreneurshipOfferDeleteView

urlpatterns = [
    # 用户的个人Offer列表页
    path('my-offers/<int:user_id>/', EntrepreneurshipOffersByUser.as_view(), name='my_entrepreneurship_offers'),
    # 删除Offer的页面
    path('offer/<int:pk>/delete/', EntrepreneurshipOfferDeleteView.as_view(), name='delete_entrepreneurship_offer'),
]

如果你的URL是用username作为参数的,只需要把reverse里的kwargs改成{'username': current_user.username},同时调整URL配置里的参数即可。

为什么这样可行?

  • self.object是DeleteView内置的属性,在视图处理流程中,会先获取到要删除的对象实例并赋值给它,所以我们能直接访问关联的created_by用户。
  • reverse函数可以根据URL的name反向生成完整的URL,传递kwargs就能把用户的ID或用户名作为参数传进去,刚好匹配你的列表视图需求。

内容的提问来源于stack exchange,提问作者bgarcial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:42:51