我想通过 SiteDispatchView 根据用户的角色将用户重定向到 ListView 或 DetailView。如果是DetailView,我想传入request.user.site
DetailView,但是遇到:AttributeError: Generic detail view SiteDetailView must be called with either an object pk or a slug in the URLconf.
我的 DetailView 网址是path('<int:pk>/', SiteDetailView.as_view(), name='detail-site'),
(请注意,站点是具有站点和用户模型的 OnetoOneField。)
# views.py
class SiteDispatchView(LoginRequiredMixin, View):
def dispatch(self, request, *args, **kwargs):
if request.user.role >= 2:
return SiteDetailView.as_view()(request, self.request.user.site)
else:
return SiteListView.as_view()(request)
class SiteDetailView(LoginRequiredMixin, generic.DetailView):
template_name = "project_site/site_detail.html"
context_object_name = "project_sites"
model = Site
def get_success_url(self):
return reverse("project_site:detail-site")
问题是您的 SiteDetailView 类需要一个参数 int:pk。因此,您必须将此参数添加到两个类的 return 中:
return reverse("project_site:detail-site", args=(request.user.site.id,))
编辑:
作为提示,您应该在使用类时使用reverse_lazy()而不是reverse()。
https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句