2009-12-12 5 views
3

다른보기에서 직접보기를 호출하려고합니다 (가능한 경우). 보기가 있습니다 :Django : 두 번째보기로 직접 요청 (인라인) 전달

def product_add(request, order_id=None): 
    # Works. Handles a normal POST check and form submission and redirects 
    # to another page if the form is properly validated. 

두 번째 뷰에서는 제품 데이터에 대해 DB를 쿼리하고 첫 번째 뷰를 호출해야합니다.

def product_copy_from_history(request, order_id=None, product_id=None): 
    product = Product.objects.get(owner=request.user, pk=product_id) 

    # I need to somehow setup a form with the product data so that the first 
    # view thinks it gets a post request. 
    2nd_response = product_add(request, order_id) 
    return 2nd_response 

첫 번째보기에서 제품을 추가해야하므로 두 번째 제품에서 첫 번째보기를 호출 할 수 있는지 궁금합니다.

내가 목표로하는 것은 요청 개체를 두 번째보기로 전달하고 얻은 응답 개체를 다시 클라이언트에 반환하는 것입니다.

도움이 될만한 비평이라면 큰 도움이됩니다. 그런 다음 DRY-ing을 피하기위한 몇 가지 지침이 있습니다.

고맙습니다.

Gerard.

+0

괜찮을 것입니다. 작동합니까? –

답변

3

내 신이 무엇을 생각하고 있었는지. 이는 가장 좋은 솔루션입니다.

def product_add_from_history(request, order_id=None, product_id=None): 
    """ Add existing product to current order 
    """ 
    order = get_object_or_404(Order, pk=order_id, owner=request.user) 
    product = Product.objects.get(owner=request.user, pk=product_id) 

    newproduct = Product(
        owner=request.user, 
        order = order, 
        name = product.name, 
        amount = product.amount, 
        unit_price = product.unit_price, 
        ) 
    newproduct.save() 
    return HttpResponseRedirect(reverse('order-detail', args=[order_id])) 
0

보기는 일반적인 파이썬 방법입니다. 물론 다른 인수를 호출하여 적절한 인수를 전달하고 결과를 올바르게 처리 할 수 ​​있습니다 (예 : 404 ...). 이제는 좋은 습관이라면 나는 모른다. 나는 utiliy 방법에 나 자신과 양쪽보기에서 그것을 부를 것이다.

+0

실용적인 방법이란 별도의 도우미 함수를 작성하는 것입니까? – GerardJP

0

HTTP를 통해 API를 호출하는 데 문제가 없다면 urllib에서 post까지 product_add 요청 처리기로 요청할 수 있습니다.

django와 함께 제공되는 dev 서버로 개발하면 한 번에 하나의 요청 만 처리하고 무기한으로 차단되므로이 문제가 추가 될 수 있습니다 (trac, google groups 참조).

+0

머리 위의 좋은 점. 고맙습니다! – GerardJP