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中有as
crn
参数,以及
self.user
as
admin

谢谢。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()