Django:UnboundLocalError:分配前已引用局部变量“ company” [英] Django: UnboundLocalError: local variable 'company' referenced before assignment

查看:111
本文介绍了Django:UnboundLocalError:分配前已引用局部变量“ company”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过在其详细信息视图中传递两个主键来创建url字段...

I am trying to make a url field in my detail view by passing two primary key in it...

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

This is what I have done in 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列表视图中,我这样做:

And in my group1 list view I have done this:

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

有人可以告诉我这段代码我在做什么吗?

Can anyone tell me what I am doing wrong in this code?

谢谢

推荐答案

在您的函数中,您分配一个变量名为 company ,因此Python会将 company 视为局部变量,但此时未分配,因此您需要使用另一个变量名来避免这种情况:

In your function, you assign to a variable named company, so Python considers company to be a local variable, but at that moment unassigned, so you will need to use another variable name to avoid this:

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_obj = get_object_or_404(group1, pk=pk2)
    return group1_obj

从这里开始但是不要使用 company_obj ,则可能要删除变量名称:

Since you here however do not use company_obj, you might want to drop the variable name:

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

,如果您的 group1 是相关的,到公司,并且您想检查该行是否成立,可以对该公司进行过滤:

as an alternative, if your group1 is "related" to company, and you want to chekck if that holds, it makes sense to filter on that company:

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



注意 PEP-8 [Python-doc] 建议使用 CamelCase 编写的类名,而字段和局部变量则用 lower_case 编写。看到类似 some_class = SomeClass()的情况并不少见,因此因为骆驼的情况以大写字母开头,所以局部变量和类之间的冲突将永远不会存在。 p>

Note: PEP-8 [Python-doc] advices class names to be written in CamelCase, whereas fields and local variables are written in lower_case. It is not uncommon to see something like some_class = SomeClass(), so because the camel case starts with an uppercase, clashes between local variables and classes, will never exist.

这篇关于Django:UnboundLocalError:分配前已引用局部变量“ company”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆