2009-12-17 3 views
4

Cela semble devrait être évident, mais la solution me échappe. Normalement j'écrirais juste une fonction de vue simple qui remplirait une forme appropriée et la passerais à la vue, mais la solution se sentirait si proche.Passez un formulaire créé avec les paramètres d'URL capturés à une vue django générique?

J'ai un formulaire. Je veux instancier ce formulaire en utilisant un object_id que j'ai capturé dans l'URL, puis l'envoyer à mon modèle en utilisant le paramètre extra_context.

J'ai quelque chose comme ceci:

class AddProductForm(forms.Form): 
    product = forms.IntegerField() 
    quantity = forms.IntegerField() 

et ceci:

url(r'^products/(?P<object_id>\d+)/$', 
    'django.views.generic.list_detail.object_detail', 
    {'queryset': Product.objects.all(), 
    'extra_context': {'form': AddProductForm({'product': <what?>, 'quantity': 1})}, 
    name='product_detail'), 

Est-il possible de remplacer <what?> ci-dessus avec la valeur capturée de object_id? (Peut-être un callable intelligent passé en extra_context pourrait faire le formulaire pour moi?)

Répondre

6

Je crains que vous ne pouvez pas faire cela dans votre urlconf. Tout appelable que vous fournissez ne peut accepter aucun argument, vous ne pourrez donc pas obtenir la valeur ?P<object_id>.

Vous pouvez toutefois réutiliser la vue générique dans votre propre vue de réduire la quantité de boilerplate vous devez écrire:

from django.views.generic.list_detail import object_details 
from your.forms import AddProductForm 
from your.models import Product 

def about_pages(request, object_id=None): 
    qs = Product.objects.all() 
    f = AddProductForm({'product':object_id,'quantity':1}) 
    return object_details(request,queryset=qs,extra_context={'form':f},template='yourtemplate.html') 
+0

+1 Merci, cela est essentiellement ce que je faisais (finalement j'avais ajouter des champs supplémentaires à mon formulaire, donc quelque chose comme ça était nécessaire de toute façon). Je me suis demandé ce que les gens utilisent les callables dans extra_context. – Seth

+0

Reportez-vous à la documentation des vues génériques pour l'ajout de contextes supplémentaires. Il s'agit essentiellement de jeux de requêtes supplémentaires que vous pouvez utiliser dans vos modèles. – Wogan

Questions connexes