2017-12-07 9 views
0

私はDjango 2.0タイプのURLを使用していますが、同じ名前の複数の変数を持つURLがあります。主キーであり、CBVは(他のモデルのフィールドに似ている)、それを使用する方法を知っているので、私は、私はPKを使用しているにもClassBasedView新しいURLのパターンと同じ名前の複数の変数

path('/companies/<int:pk>/products/<int:pk>/', AccountCompanyProductDetailView.as_view() 

を使用しています。

他の名前を使用すると、CBVは何を検索するのかわかりません。

CBVではどのようにパラメータを取得し、どちらがどちらであるかを知ることができます。 ? Djangoはどのモデルから各ポジションで必要なpkを知っていますか?

+0

私はそうは思わない....私はそれが異なるvarsの異なる名前を使用する方が良いと思います – rajkris

+1

あなたのCBVのパラメータにアクセスする方法を尋ねていますか?私はそれらを '' ''と '' ''に名前を変更してクラスにアクセスします。 –

+0

しかし、pk(プライマリキー)やスラッグを使用しない場合、CBVがどのように検索すればいいですか? – user3541631

答えて

1

Djangoはこれをどのように処理するのか分かりません。パラメータの名前を変更し、CBVにアクセスする必要があります。 これは、次のようになります。

urls.py

path('/companies/<int:pk1>/products/<int:pk2>/', AccountCompanyProductDetailView.as_view()) 

views.py

class AccountCompanyProductDetailView(DetailView): 
    model = Product 

    def get_object(self): 
     pk1 = self.kwargs['pk1'] 
     pk2 = self.kwargs['pk2'] 
     company = get_object_or_404(Company, pk=pk1) 
     product = get_object_or_404(Product, pk=pk2) 
     return product 

あなたはあまりにも他のビューでこれを行う必要があります。 get_querysetのようなメソッドをオーバーライドします。上記のようにkwargsにアクセスします。

+0

そのコードはおそらく 'get_queryset'または' get_objectz 'にあるはずです。 –

+0

私は速すぎました。コードが更新されました。 –

関連する問題