J'ai un modèle Django:Définir les champs visibles de Django ModelForm lors de l'exécution?
class Customer(models.Model):
first_name=models.CharField(max_length=20,null=True, blank=True)
last_name=models.CharField(max_length=25,null=True, blank=True)
address=models.CharField(max_length=60,null=True, blank=True)
address2=models.CharField(max_length=60,null=True, blank=True)
city=models.CharField(max_length=40,null=True, blank=True)
state=models.CharField(max_length=2,null=True, blank=True)
À partir de là, je créé un ModelForm:
class CustomerForm(forms.ModelForm):
class Meta:
model=Customer
Je voudrais être en mesure de montrer des morceaux de forme dans mon modèle correspondant à des informations spécifiques les utilisateurs peuvent changer. Par exemple, si je souhaite que les clients changent de nom, j'aimerais pouvoir afficher un formulaire contenant uniquement les champs «prénom» et «nom_famille».
Une façon de le faire serait de créer un ModelForm pour chacun des différents extraits de terrain ... pour l'exemple de nom, il ressemblerait à quelque chose comme:
class CustomerFormName(forms.ModelForm):
class Meta:
model=Customer
fields=('first_name','last_name')
Cela semble assez inélégante, et inflexible . Ce que je voudrais faire, c'est pouvoir spécifier les champs à l'exécution, donc quand je passe le dictionnaire de la vue au modèle, je peux simplement définir les champs que je voudrais montrer. Comment puis-je le configurer de sorte que je définis les champs pour un formulaire lors de l'exécution? Je serais idéalement comme le dictionnaire dernier est passé à ressembler à quelque chose comme ceci:
{'name_change_form':CustomerFormName(<form with only first_name and last_name>), 'address_change_form':CustomerFormName(<form with only address fields>)}
Ensuite, je sais que chaque fois que je sortie name_change_form.as_p, il va falloir exactement les champs de formulaire que je suis à la recherche.
Pensées? Aussi, n'hésitez pas à recommander une meilleure façon de le faire.