2009-12-12 48 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 

由於第二個需要增加產品作爲第一種觀點確實是我想知道如果我可以調用從第二個第一視圖。

我的目標是什麼的只是通過request對象傳遞給第二個觀點,進而返回所得到的響應對象返回給客戶端。

任何幫助非常感謝,critism以及如果這是一個糟糕的方式做到這一點。但是,接下來的一些提示是爲了避免乾燥。

Thanx!

傑拉德。

+0

應該沒問題。它工作嗎? – 2009-12-12 13:52:57

回答

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

視圖是一個普通的Python方法,當然你可以調用一個從另一個給你傳遞正確的參數,正確處理結果(如404 ...)。現在,如果這是一個很好的做法,我不知道。我會自己去做一個有用的方法,並從兩個視圖中調用它。

+0

通過實用方法,你的意思是寫一個單獨的幫助函數? – GerardJP 2009-12-12 13:50:42

0

如果您通過HTTP調用API的開銷很大,您可以使用urllibpost向您的product_add請求處理程序發送請求。

據我知道,如果你用自帶的Django開發服務器的發展,因爲它只能處理一次一個請求,並且將無限期地阻止,這可能增加一些麻煩(見tracgoogle groups)。

+0

頂上的好點。感謝名單! – GerardJP 2009-12-12 13:49:20

相關問題