Frage

Ich versuche, eine Ansicht von einem anderen direkt anzurufen (sofern dies überhaupt möglich ist). Ich habe einen Blick:

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.

Dann habe ich eine zweite Ansicht, dass die DB für die Produktdaten abfragt und soll die ersten nennen.

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

Da der zweit man braucht, um ein Produkt hinzuzufügen, als der erste Blick macht es ich mich gefragt, ob ich gerade den ersten Blick von dem zweiten nennen könnte.

Was ich bin mit dem Ziel für sich nur auf den zweiten Blick durch das Anfrage-Objekt übergeben und gibt das erhaltene Antwortobjekt wiederum zurück an den Client.

Jede Hilfe sehr geschätzt, critism auch wenn dies eine schlechte Art und Weise ist, es zu tun. Aber dann .. einige Hinweise DRY-ing zu vermeiden.

Thanx!

Gerard.

War es hilfreich?

Lösung

Mein Gott, was dachte ich. Dies wäre die sauberste Lösung natürlich sein:

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]) )

Andere Tipps

Ein Blick eine regelmäßige Python-Methode ist, können Sie natürlich Anruf von ihnen geben übergeben Sie die richtigen Argumente und das Ergebnis korrekt verarbeiten (wie 404 ...). Nun, wenn es eine gute Praxis, weiß ich nicht. Ich würde mich auf eine utiliy Methode und es von beiden Ansichten aufrufen.

Wenn Sie sind gut mit dem Overhead Ihre API über HTTP Aufruf Sie urllib können Sie eine Anfrage an Ihren post-Request-Handler product_add.

Soweit ich weiß, dass dies einige Probleme hinzufügen könnte, wenn Sie mit dem Entwickler-Server, der mit django kommt entwickeln, da es nur zu einem Zeitpunkt eine Anforderung verarbeitet und blockiert auf unbestimmte Zeit (siehe trac , google Groups ).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top