Vous n'êtes pas identifié(e).
Bonjour,
J'ai un petit souci pour l'initialisation d'un formulaire au sein d'un formset.
Je n'arrive pas à faire passer un argument au moment de l'initialisation du formset, voici mon code et mon erreur.
Mon, erreur
'EventAddInvitGroupForm' object has no attribute '__name__'
La tentative d'initialisation
EventAddInvitGroupFormSet = formset_factory(EventAddInvitGroupForm(event = Event.id) , extra = 0, max_num = group_rech.count())
formset = EventAddInvitGroupFormSet(initial = group_rech_values)
Mon formulaire
class EventAddInvitGroupForm(forms.Form):
id_unique = forms.CharField(widget=forms.HiddenInput())
Slug = forms.CharField(widget=forms.HiddenInput())
DateConvoc = forms.DateTimeField(label ='Date et heure', widget=forms.DateTimeInput(), required = False)
Contenu = forms.CharField(label = 'Message', widget=forms.TextInput(attrs={'size':'40'}), help_text = "Commentaire, 255 caractères max", required = False)
Invitation = forms.BooleanField(label = 'Invitation', required = False)
Scene = forms.ModelChoiceField(queryset = scene.objects.none(), label = 'Scène', required = False)
def __init__(self, event = None, *args, **kwargs):
super(EventAddInvitGroupForm, self).__init__(*args, **kwargs)
self.event = event
self.evente = evenement.objects.get(id = self.event)
if self.event != None:
self.lieu = Lieux.objects.filter(id = self.evente.Lieu.id)
self.fields['Scene'].queryset = scene.objects.all()
else:
self.fields['Scene'].queryset = scene.objects.all()
Si quelqu'un peut me donner la marche à suivre, d'avance, merci.
Hors ligne
Bonjour,
Ton formulaire est instancié quand tu le passes en argument à ton formset_factory ce qui ne devrait pas être le cas.
Pour contourner ce souci, il te faudra faire:
EventAddInvitGroupFormSet = formset_factory(EventAddInvitGroupForm , extra=0, max_num=group_rech.count())
EventAddInvitGroupFormSet.form = staticmethod(curry(EventAddInvitGroupForm, event=request.Event.id))
formset = EventAddInvitGroupFormSet(initial = group_rech_values)
J'en profite au passage, pourquoi as-tu besoin du Event.id dans ton formset ?
Je pose la question parcequ'il est possible d'un modelformset ou un inline formset soit plus adapté.
Hors ligne
Merci pour la réponse,
Pouvez-vous m'expliquer l'utilisation de cette méthode s'il vous plait (staticmethod et curry) ?
Seconde question, que doit-on importer pour utiliser staticmethod et curry ?
Je fais passer event.id car je n'ai besoin d'injecter des données par défaut dans un champ (choicefield).
Cordialement
Hors ligne
Pour les détails, Carl Meyer en donne l'explication ici:
http://stackoverflow.com/questions/6229 … 013#624013
staticmethod est un mot clef Python et curry vient du module django.utils.functional
Hors ligne