3

我正在尝试直接从另一个视图调用一个视图(如果这可能的话)。我有一个看法:

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.

然后我有第二个视图,它在数据库中查询产品数据并应该调用第一个视图。

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

由于第二个需要像第一个视图一样添加产品,所以我想知道是否可以从第二个视图中调用第一个视图。

我的目标只是将请求对象传递到第二个视图,然后将获得的响应对象依次返回给客户端。

非常感谢任何帮助,如果这是一种不好的方法,也可以批评。但随后一些指针.. 以避免干燥。

谢谢!

杰拉德。

4

3 回答 3

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]) )
于 2009-12-12T14:03:57.483 回答
0

视图是一种常规的 python 方法,您当然可以从另一个调用一个视图,给您传递正确的参数并正确处理结果(如 404 ...)。现在,如果这是一个好习惯,我不知道。我会自己使用一个实用方法并从两个视图中调用它。

于 2009-12-12T13:43:16.470 回答
0

如果您对通过 HTTP 调用 API 的开销感到满意,则可以使用urllib对请求处理程序postproduct_add请求。

据我所知,如果您使用 django 附带的开发服务器进行开发,这可能会增加一些麻烦,因为它一次只处理一个请求并且会无限期地阻塞(请参阅tracgoogle groups)。

于 2009-12-12T13:45:57.317 回答