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

相关问题