Django:UnboundLocalError:在赋值之前引用的局部变量'company'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:UnboundLocalError:在赋值之前引用的局部变量'company'相关的知识,希望对你有一定的参考价值。

我试图通过传递两个主键在我的详细视图中创建一个url字段...

这是我在urls.py中所做的:

    url(r'^company/(?P<pk1>d+)/groupdetail/(?P<pk2>d+)/$',views.group1DetailView.as_view(),name='groupdetail'),

在我看来:

    def get_object(self):
        pk1 = self.kwargs['pk1']
        pk2 = self.kwargs['pk2']
        company = get_object_or_404(company, pk=pk1)
        group1 = get_object_or_404(group1, pk=pk2)
        return group1

我在这一行得到错误:

company = get_object_or_404(company, pk=pk1)

在我的group1列表视图中,我做到了这一点:

<a href="{% url 'accounting_double_entry:groupdetail' pk1=company_details.pk pk2=group1_details.pk %}">{{group1.group_Name}}</a>

谁能告诉我这段代码中我做错了什么?

谢谢

答案

在你的函数中,你分配给一个名为company的变量,所以Python认为company是一个局部变量,但在那一刻未分配,所以你需要使用anoter变量名来避免这种情况:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    # make sure the variable name is different than the model name
    company_obj = get_object_or_404(company, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2)
    return group1

既然你在这里不使用company_obj,你可能想删除变量名:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    get_object_or_404(company, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2)
    return group1

作为替代方案,如果您的group1company“相关”,并且如果有,那么您想要解决,那么筛选该公司是有意义的:

def get_object(self):
    pk1 = self.kwargs['pk1']
    pk2 = self.kwargs['pk2']
    company_obj = get_object_or_404(company, pk=pk1)
    group1 = get_object_or_404(group1, pk=pk2, company=company_obj)
    return group1

注意:PEP-8 [Python-doc]建议用CamelCase编写类名,而字段和局部变量用lower_case编写。看到像some_class = SomeClass()这样的东西并不罕见,所以因为驼峰案例以大写字母开头,局部变量和类之间的冲突将永远不会存在。

以上是关于Django:UnboundLocalError:在赋值之前引用的局部变量'company'的主要内容,如果未能解决你的问题,请参考以下文章

Django:UnboundLocalError:在赋值之前引用的局部变量'company'

分配前引用的 /blog/search/ 局部变量 'cd' 处的 UnboundLocalError

UnboundLocalError:分配前引用的局部变量“光标”

Python 3:UnboundLocalError:分配前引用的局部变量[重复]

UnboundLocalError

不明白为啥会发生 UnboundLocalError(关闭)[重复]