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.

次に、2番目のビューがあります。これは、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

2番目のビューは最初のビューと同じように製品を追加する必要があるので、2番目のビューから最初のビューを呼び出すことができるかどうか疑問に思いました。

私が目指しているのは、リクエストオブジェクトを2番目のビューに渡し、取得したレスポンスオブジェクトをクライアントに返すことです。

これがそれを行うのに悪い方法であるならば、どんな助けも大いに感謝します、批評も同様に。しかし、その後、いくつかのポインタ..乾燥を避けるために..

ありがとう!

ジェラルド。

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 を呼び出すオーバーヘッドに問題がなければ、リクエスト ハンドラurllibpostのリクエストを使用できます。product_add

私が知る限り、django に付属の dev サーバーで開発する場合、一度に 1 つのリクエストしか処理せず、無期限にブロックするため、これによりいくつかの問題が発生する可能性があります ( tracgoogle groupsを参照)。

于 2009-12-12T13:45:57.317 に答える