Django-fr

Forum

#1 08-05-2013 13:28:18

torrak
Membre
Inscription : 31-08-2011
Messages : 47

problème initialisation formulaire

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

#2 08-05-2013 14:02:41

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : problème initialisation formulaire

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

#3 08-05-2013 18:32:11

torrak
Membre
Inscription : 31-08-2011
Messages : 47

Re : problème initialisation formulaire

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

#4 08-05-2013 19:27:17

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : problème initialisation formulaire

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

Pied de page des forums