Django:UnboundLocalError:分配前引用的局部变量“公司" [英] Django: UnboundLocalError: local variable 'company' referenced before assignment

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

问题描述

我试图通过在其中传递两个主键来在我的详细信息视图中创建一个 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']公司 = get_object_or_404(公司,pk=pk1)group1 = get_object_or_404(group1, pk=pk2)返回组1

我在这一行遇到错误:

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 成为局部变量,但此时未赋值,因此您需要使用另一个变量名来避免这种情况:

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)返回 group1_obj

因为你在这里不使用company_obj,你可能想要删除变量名:

def get_object(self):pk1 = self.kwargs['pk1']pk2 = self.kwargs['pk2']get_object_or_404(公司,pk=pk1)group1_obj = get_object_or_404(group1, pk=pk2)返回 group1_obj

作为替代,如果您的 group1 是相关的"到 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)返回 group1_obj

<块引用>

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

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

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'),

And in my views:

    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

I am getting error in this line:

company = get_object_or_404(company, pk=pk1)

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?

Thank you

解决方案

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

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

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

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:分配前引用的局部变量“公司"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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