【发布时间】:2018-08-16 10:35:43
【问题描述】:
我有一个company 模型,它的每个实例都有一个名为admin 的foreign_key 给用户。
我正在编写一个视图以允许公司管理员管理他们的公司:
urls.py:
path('admin/crn=<company_spec_url>', CompanyAdminView.as_view(), name="CompanyAdminView"),`
views.py:
class CompanyAdminView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
template_name = 'company_admin.html'
def test_func(self):
company = Company.objects.filter(crn=context['company_spec_url'])[0]
return company.admin == self.user
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['company'] = Company.objects.filter(crn=context['company_spec_url'])[0]
context['announcements'] = CompanyAnnouncement.objects.filter(company__crn=context['company_spec_url'])
return context
get_context_data 位工作正常,问题出在test_func。显然,应该只允许公司的管理员管理公司,所以我试图进入test_func,以便对其进行测试。
test_func 中的代码目前不起作用,因为它无权访问context。最佳实践是:调用super().get_context_data 一次,并将context 设为全局变量,以便可以从test_func 访问它 - 调用super().get_context_data 两次,一次在get_context_data 中,一次在test_func 中,或者完全不同的东西?
我尝试查看请求中的 GET dict,但它是空的。我可以只解析 test_func 中的 url 以自己获取参数,但这似乎不是“正确”的方法。
【问题讨论】:
标签: django django-views django-urls