1

내 앱에서는 상점에서 제품을 만들어야합니다. 그래서 저는 모델 샵과 모델 제품을 가지고 있습니다. DetailView ShopDetail에서 내 가게에 대한 세부 정보를 볼 수 있습니다. 이제는 제품을 만들기 위해 CreateView가 필요하지만 URL은 /shops/shop-id/products/create/이어야하며 상점 내에 제품을 생성해야합니다. 나는 그것 같아 보인다.Django의 DetailView와 CreateView를 결합하십시오. 1.5

class ProductCreate(SingleObjectMixin, CreateView): 
    model = Product 

    def get_object(self, queryset=None): 
     return Shop.objects.get(id = self.kwargs['shop_id']) 

나는 올바른 길 위에있다? :-D

+0

당신이 백그라운드에서'CreateView'에서 그 관계를 설정해야합니다 있도록, Product'>'Shop''에서 FK 관계가 (기준 url에서 id를 가져 와서 수동으로 관계를 지정), 사용자가 새 인스턴스를 만들 때 관계가 저장되도록 해당 필드를 새 양식에 숨 깁니다. 또는 사용자가 양식을 게시하고 유효성을 검사 할 때 relationshop을 설정할 수 있습니다. –

+0

Hej Timmy. 양식 데이터를 저장하기 전에 form.instance.shop 설정에 의해 form_valid에서이 문제를 처리 할 수 ​​있음을 알고 있지만 템플릿에서 상점 이름을 얻을 수 있도록 컨텍스트 데이터를 설정해야합니다. – Nets

답변

0

아니요, 올바른 경로에 있지 않습니다. get_object에 의해 반환 된 개체는 model의 인스턴스 여야합니다. 사실 get_object을 무시하면 model 속성은 부적절한 것이됩니다.

은이 문제에 대한 몇 가지 방법이 있습니다,하지만 난 나 자신은 아마도합니다 (Shop 세부 사항) 단일 DetailView에 대한 얻었다 것, 그리고 get_context_data 방법을 통해 템플릿에 Product에 대한 양식을 추가 할 수 있습니다. 양식의 action 속성은 비어있는 대신 Product 생성을 처리 할 별도의 CreateView에 대한 URL을 가리 킵니다.

은 또는 당신은 단순히 간단하지만 (상점에 대한 DetailViewProduct에 대한 CreateView으로 정의 된 바와 같이) 문제를 섞는 get_context_data, 통해 Shop 세부 사항을 표시 할 수 있습니다.

0

난 당신이 필요하다고 생각 :

from django.shortcuts import get_object_or_404 

class ProductCreate(CreateView): 
    """Creates a Product for a Shop.""" 
    model = Product 

    def form_valid(self, form): 
     """Associate the Shop with the new Product before saving.""" 
     form.instance.shop = self.shop 
     return super(CustomCreateView, self).form_valid(form) 

    def dispatch(self, *args, **kwargs): 
     """Ensure the Shop exists before creating a new Product.""" 
     self.shop = get_object_or_404(Shop, pk=kwargs['shop_id']) 
     return super(ProductCreate, self).dispatch(*args, **kwargs) 

    def get_context_data(self, **kwargs): 
     """Add current shop to the context, so we can show it on the page.""" 
     context = super(ProductCreate, self).get_context_data(**kwargs) 
     context['shop'] = self.shop 
     return context 

가 나는 그것이 도움이되기를 바랍니다! :)what the super-methods do을 살펴볼 수 있습니다.

(면책 조항 : 파렴치 자기 홍보.) 아마도