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

のクエリセットをカスタマイズしたいのでDetailView、これを行う正しい方法は関数をオーバーライドする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)

クラスのインスタンスが作成された場合にのみ、クラス宣言にaが存在しないselfため、現在のように使用することはできません。self

于 2013-02-09T10:58:46.280 に答える
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

また、関連のない補足として、あなたのコードは 3 つの異なるスタイルを組み合わせて使用​​しています。PEP8を読んでみてください。

于 2013-02-09T10:42:53.427 に答える