Django,正在查看url参数
我有一个Django,正在查看url参数,django,django-views,django-urls,Django,Django Views,Django Urls,我有一个company模型,它的每个实例都有一个名为admin的外键供用户使用 我写的是一个观点,允许公司管理员管理他们的公司: url.py: path('admin/crn=<company_spec_url>', CompanyAdminView.as_view(), name="CompanyAdminView"),` class CompanyAdminView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
company
模型,它的每个实例都有一个名为admin
的外键供用户使用
我写的是一个观点,允许公司管理员管理他们的公司:
url.py
:
path('admin/crn=<company_spec_url>', CompanyAdminView.as_view(), name="CompanyAdminView"),`
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\u context\u data
位工作正常,问题出在test\u func
中。显然,应该只允许公司的管理员管理公司,因此我正试图进入测试功能,以便针对它进行测试
test_func
中的代码当前不起作用,因为它没有访问上下文的权限。最好的做法是:调用super()。获取上下文数据一次,并使context
成为一个全局变量,这样就可以从test\u func
-调用super()。获取上下文数据两次,一次在get\u context\u data
中,一次在test\u func
中,或者完全其他什么
我试图查看请求中的GET dict,但它是空的。我可以自己解析test_func
中的url来获取参数,但这似乎不是“正确”的方法。位置参数和命名参数分别存储在self.args
和self.kwargs
中,因此您可以通过以下方式访问它:
class CompanyAdminView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
# ...
def test_func(self):
company = Company.objects.filter(crn=self.kwargs['company_spec_url'])[0]
return company.admin == self.user
通过以上内容,我们检查是否有公司
在URL中有ascrn
参数,以及self.user
asadmin
谢谢。crn实际上是唯一的,但第二个选项要好得多,因为它捕获了给定crn不存在的情况。非常感谢。
class CompanyAdminView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
# ...
def test_func(self):
return Company.objects.filter(
crn=self.kwargs['company_spec_url']
admin=self.user
).exists()