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'未定义
答案 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
。