Comment créer des champs dans modelform sur le go?
Par exemple, je souhaite créer 3 textboxes (car il y a 3 entrées dans la table de base de données) code> p>
self.fields['myfield'].widget = forms.Textarea()
3 Réponses :
Oui, vous voulez remplacer le Voir lots plus info ICI - Tout s'applique pas à Modelform. P> P> __ init __ code>, quelque chose comme:
Vous pouvez ajouter QuerySet sur les formulaires.charfield pour récupérer les valeurs de la base de données de manière dynamique.
Je pense que votre meilleur pari est, dans ce cas, de coller à Forms Formsets .
Pour tout autre cas, vous pouvez simplement ajouter de nouveaux champs à l'attribut code> code>, à l'intérieur de votre formulaire __ init __ code>.
def __init__(self, *args, *kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields.update({
'foo': forms.CharField(widget=forms.Textarea()),
'bar': forms.CharField(widget=forms.Textarea()),
})
Les constructeurs automatiques sont la réponse simple ici.
Vous pouvez également définir de manière dynamique des champs de formulaire à l'aide du django.forms.models.modelormmetaclass code> (utilisé par django.forms.models.modelform_factory). Cela créera une classe Modelform à l'aide des champs que vous spécifiez plutôt que de mettre à jour les champs 'de la mouche' dans l'init.
from django import forms
from django.forms.models import ModelForm, ModelFormMetaclass
model = MyModel
fields = {
'myfield': forms.CharField(widget=forms.Textarea())
}
meta_attrs = {
'model': model,
}
Meta = type('Meta', (object, ), meta_attrs)
form_class_attrs = {
'Meta': Meta,
}
form_class_attrs.update(fields)
MyModelForm = ModelFormMetaclass('MyModelForm', (ModelForm, ), form_class_attrs)