名称'self'未定义

时间:2013-02-09 10:29:48

标签: python django python-2.x

class customerDetailView(DetailView):
    queryset = Customer.objects.get(name=self.name) # This line give error NameError: name 'self' is not defined
    context_object_name = 'customerDetail'
    template_name = "customer.html"
    allow_empty = True

    def __init__(self, name=None, *args):
        self.name = name

给出错误NameError:名称'self'未定义

2 个答案:

答案 0 :(得分:3)

您应该将初始化代码放在__init__内,而不是Class正文:

class CustomerDetailView(DetailView):
    def __init__(self, name=None):
        self.name = name
        self.queryset = Customer.objects.get(name=self.name, None)
        self.context_object_name = 'customerDetail'
        self.template_name = "customer.html"
        self.allow_empty = True
    # stuff

此外,作为一个不相关的旁注,您的代码使用三种不同样式的混合。请尝试阅读PEP8

答案 1 :(得分:3)

由于您想要自定义DetailView的查询集,正确的方法是覆盖get_queryset()函数。请参阅显示方法解析顺序的documentation for DetailView。特别是,get_queryset()被称为。{/ p>

所以你的代码会变成这样:

class customerDetailView(DetailView):
    context_object_name = 'customerDetail'
    template_name = "customer.html"
    allow_empty = True

    def __init__(self, name=None, *args):
        self.name = name

    def get_queryset(self):
        return Customer.objects.get(name=self.name)

您不能以您的方式使用self,因为只有在创建类的实例时,类声明中才存在self