2017-12-07 25 views
0

나는 장고 2.0 유형의 URL을 사용하고 있으며 동일한 이름의 여러 변수가있는 URL이 있습니다. 나는 또한 사용하여 기본 키와 CBV가 (다른 모델 필드와 유사)를 사용하는 방법을 알고 있기 때문에 내가 PK를 사용하고새로운 URL 패턴과 동일한 이름을 가진 여러 변수

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

ClassBasedView하고 있습니다.

다른 이름을 사용하면 CBV는 검색 대상을 알 수 없습니다.

CBV에서 매개 변수를 얻는 방법과이를 알 수 있습니까? ? Django는 각 위치에서 필요한 모델을 구하는 방법을 알고 있습니까?

+0

나는 그렇게 생각하지 않는다. ... 나는 다른 바의 다른 이름을 사용하는 것이 더 좋다. – rajkris

+1

CBV의 매개 변수에 액세스하는 방법을 묻는 질문이 있으십니까? 나는 그것들을''''과''''로 이름을 바꿔 수업에 접근 할 것입니다. –

+0

하지만 pk (기본 키) 또는 슬러그를 사용하지 않으면 CBV에서 검색하는 방법이 필요한 필드의 이름이 아닌지 확인하십시오. – user3541631

답변

1

장고는 이것을 어떻게 처리해야할지 모릅니다. 매개 변수의 이름을 바꾸고 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

너무 빠르다. 코드가 업데이트되었습니다. –