我怎么能跳过pk在url,而重定向到另一个url与Django的通用RedirectView ? &g



我试图删除记录后显示它与DetailView和重定向到列表页再次。

view.py

...
class DailyRecordDeleteConformationView(RequiredBasicDetailsAndContextMixin, DetailView):
model = DailyRecord
obj_not_found_redirect = reverse_lazy('business:add_daily_records')
template_name = 'business/daily_records_detail.html'
context_object_name = 'record'
def get_object(self):
detail = self.model.custom_obj.get_single(self)
return detail

class DailyRecordDeleteView(RequiredBasicDetailsMixin, RedirectView):
pattern_name = 'business:daily_records'
def get_redirect_url(self, *args, **kwargs):
# Delete the record
return super().get_redirect_url(*args, **kwargs)
...

urls . py

...
path('daily-records/', DailyRecordView.as_view(), name='daily_records'),
path('daily-records/<int:pk>/', DailyRecordDeleteConformationView.as_view(), name='daily_record_detail'),
path('daily-records/<int:pk>/delete/', DailyRecordDeleteView.as_view(), name='daily_record_delete'),
...

在这里我得到下面的错误,当点击删除按钮的详细信息视图

NoReverseMatch at /business/daily-records/7/delete/
Reverse for 'daily_records' with keyword arguments '{'pk': 7}' not found. 1 pattern(s) tried: ['business/daily\-records/\Z']

我是基于类的视图的新手,仍然无法弄清楚如何重定向到没有pk参数的url。

我试图找到任何变量的RedirectView或东西,可以跳过当前url的pk,而重定向到另一个url。

谢谢。

当你用**kwargs调用get_redirect_url时,你的pkkwargsRedirectView中,Django试图用kwargs获取你的url。

如果你不想传递pk,那就不要传递kawrgs:

def get_redirect_url(self, *args, **kwargs):
return super().get_redirect_url()

您可以指定url而不是pattern_name,因此:

from django.urls import reverse_lazy

class DailyRecordDeleteView(RequiredBasicDetailsMixin, RedirectView):
urls = reverse_lazy('business:daily_records')
# no get_redirect_url

你的get_redirect_url也不应该删除记录:HTTP协议规定GET和OPTION应该是"安全的";方法,这意味着它们应该没有有副作用。

因此,您应该使用POST/delete请求删除记录。您可以使用一个小的FormView来处理这个问题,如果(空)表单是有效的,那么通过覆盖form_valid方法。

最新更新