2011-09-20 5 views
0

Je n'ai pas un exemple parce que je ne travaille pas sur quoi que ce soit pertinent en ce moment, mais je suis toujours curieux, après avoir lu la documentation au sujet formsets:formes Django question

Quelle est une meilleures pratiques pour avoir une seule vue avec plusieurs formes de modèles différents qui affichent en même temps (plutôt une forme combinée, puisque vous ne pouvez pas afficher plusieurs formulaires en même temps, mais faute d'une meilleure explication ...), certains étant des formulaires à un seul modèle , et d'autres étant 1-ou-plus formsets (par exemple Person, son 1 Address, et son 1 ou plusieurs objets Pet), comme Django fait avec TabularInline. Les inlines sont dans Django depuis quelques temps, donc je soupçonne qu'il y a de meilleures pratiques que ce que je peux trouver en copiant/collant ce qui est dans admin/options.py, non?

Merci à l'avance

Répondre

2

Vous devez:

  • Assurez-vous que vous utilisez des transactions (donc, assurez-vous qu'ils sont activés et que vous utilisez autre chose que MySQL avec Tables MyISAM). C'est vrai tout le temps, vraiment, mais c'est encore plus vrai maintenant. :)

  • utiliser plusieurs forms.Form/forms.ModelForm objets, qui sont regroupées en un seul élément HTML <form>, comme ...

python:

from django import forms 

class FormA(forms.ModelForm): 
    [...] 

class FormB(forms.ModelForm): 
    [...] 

HTML:

<form method="post" action="/path/to/view/"> 
    {% csrf_token %} 

    {{ form_a }} 
    {{ form_b }} 

    <input type="submit" value="Submit Form" /> 
</form> 

Ensuite, lorsque vous traitez vos formulaires, il suffit de les traiter tous les deux et de vous assurer que les deux sont valides pour compléter la vue dans un cas de réussite. En guise de clause de non-responsabilité, rappelez-vous qu'il s'agit d'un exemple de base, et qu'il ne s'agit pas d'une copie à l'aveugle. Votre cas d'utilisation ultime pour cela peut être légèrement différent, et c'est très bien.

+0

Merci pour la réponse. A noter également l'argument 'prefix' d'un formset (https://docs.djangoproject.com/fr/dev/topics/forms/formsets/#using-more-than-one-formset-in-a-view) . – orokusaki