如何在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
相关产品推荐
相关产品推荐

