1
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: name 'self' is not defined

4

2 回答 2

3

你应该把你的初始化代码放在里面__init__,而不是类主体:

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

于 2013-02-09T10:42:53.427 回答
3

由于您想要自定义 aDetailView的查询集,因此正确的方法是覆盖该get_queryset()函数。请参阅DetailView 的文档,其中显示了方法解析顺序。特别get_queryset()是被称为。

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

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在类声明中不存在 a,只有在创建类的实例时才存在。

于 2013-02-09T10:58:46.280 回答