2010-03-15 3 views
4

Ce poste se rapporte à ceci: Add row to inlines dynamically in django adminDjango: Ajout de lignes de Formset inline sans javascript

est-il un moyen de achive ajouter formsets inline SANS utiliser javascript? Évidemment, il y aurait un rafraîchissement de page impliqué.

Donc, si la forme avait un bouton appelé « ajouter » ...

je me suis dit que je pouvais le faire comme ceci:

if request.method=='POST': 
    if 'add' in request.POST: 
    PrimaryFunctionFormSet = inlineformset_factory(Position,Function,extra=1) 
    prims = PrimaryFunctionFormSet(request.POST) 

que je croyais ajouter 1 à chaque fois, puis remplir le formulaire avec les données de poste. Cependant, il semble que l'extra = 1 n'ajoute pas 1 aux données post.

Répondre

5

Vous l'avez.

Parfois, c'est la solution la plus simple. Il suffit de faire une copie de la requête.POST de données et de modifier les TOTAL-FORMS.

par exemple ..

if request.method=='POST': 
    PrimaryFunctionFormSet = inlineformset_factory(Position,Function) 
    if 'add' in request.POST: 
    cp = request.POST.copy() 
    cp['prim-TOTAL_FORMS'] = int(cp['prim-TOTAL_FORMS'])+ 1 
    prims = PrimaryFunctionFormSet(cp,prefix='prim') 

Ensuite, il suffit de cracher la forme comme normale. Conserve vos données, ajoute un éditeur en ligne.

+0

C'est super merci! Mais comment empêchez-vous la validation des données postales? – Greg

+0

Si je comprends bien, la validation se produit automatiquement dans le cadre du formulaire. Formulaire/Forms.ModelForm système ... – Brant

+1

Alors, cela n'a pas d'importance pour vos fins? Je pense que si un utilisateur a entré des données dans une rangée et en demande une autre, il ne voudrait pas qu'une validation se produise avant qu'il ne soit soumis. Je vais vérifier Django si je peux l'éteindre. – Greg

Questions connexes