Vous n'êtes pas identifié(e).
Bonjour,
On prend a peu près les mêmes que dans le POST précédent et on recommence. J'ai un problème au moment de l'initialisation d'un model formset.
En effet, je souhaite faire à peu près la même chose que dans ce post mais à l'échelle d'un formset.
Voici mon code:
class InvitForm(BaseModelFormSet):
def __init__(self, event = None, *args, **kwargs):
super(InvitForm, self).__init__(*args, **kwargs)
self.event = event
if self.event != None:
self.evente = evenement.objects.get(id = self.event)
self.lieu = Lieux.objects.get(id = self.evente.Lieu.id)
self.scenes = [x.id for x in self.lieu.scene_set.all()]
for form in self.forms:
form.fields['Scene'].queryset = scene.objects.filter(id__in = self.scenes)
else:
for form in self.forms:
form.fields['Scene'].queryset = scene.objects.all()
InvitFormSet = modelformset_factory(invitEvtGrp, extra = 0, formset = InvitForm, fields=('idGrpArtDest', 'DateConvoc', 'OrdrePass', 'Objet', 'Contenu', 'e_mail', 'Scene' ))
InvitFormSet.form = staticmethod(curry(InvitForm, event=Event.id))
Voici mon erreur:
Environment:
Request Method: GET
Request URL: http://xxxxxxxxxxxxxxxxxx/xxxxxxx/xxxxxx/xxxxxxxxxx/xxxxxxxxxxxxxx/
Django Version: 1.4
Python Version: 2.6.6
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
'xxxxxxxxxxxx',
'django.contrib.admin',
'django.contrib.gis',
'django.contrib.admindocs')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/usr/local/alwaysdata/python/django/1.4/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home//xxxxxxxxxxxxx/xxx/xxxxxxx/views.py" in EventModif
1281. InvitFormSet = InvitFormSet(queryset = InvitGroupes)
File "/home/xxxxxxxxxxxxx/xxx/xxxxxxx/views.py" in __init__
1138. super(InvitForm, self).__init__(*args, **kwargs)
File "/usr/local/alwaysdata/python/django/1.4/django/forms/models.py" in __init__
424. super(BaseModelFormSet, self).__init__(**defaults)
File "/usr/local/alwaysdata/python/django/1.4/django/forms/formsets.py" in __init__
50. self._construct_forms()
File "/usr/local/alwaysdata/python/django/1.4/django/forms/formsets.py" in _construct_forms
115. self.forms.append(self._construct_form(i))
File "/usr/local/alwaysdata/python/django/1.4/django/forms/models.py" in _construct_form
458. return super(BaseModelFormSet, self)._construct_form(i, **kwargs)
File "/usr/local/alwaysdata/python/django/1.4/django/forms/formsets.py" in _construct_form
134. form = self.form(**defaults)
File "/usr/local/alwaysdata/python/django/1.4/django/utils/functional.py" in _curried
11. return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
File "/home/xxxxxxxxxxxxx/xxx/xxxxxxx/views.py" in __init__
1138. super(InvitForm, self).__init__(*args, **kwargs)
File "/usr/local/alwaysdata/python/django/1.4/django/forms/models.py" in __init__
424. super(BaseModelFormSet, self).__init__(**defaults)
Exception Type: TypeError at /event/mod/1576/xxxxxxxxxxxxx/
Exception Value: __init__() got an unexpected keyword argument 'instance'
voilà, si quelqu'un peut me filer un petit coup de main, merci.
Hors ligne
Bonjour,
La notation d'un InvitForm qui est un FormSet et non un Form introduit une certaine confusion.
L'idée de base avec le curry était de préparer le formulaire directement avec un argument supplémentaire et non le formset.
En conséquence, je pense que la ligne ci-dessous doit être modifiée pour que le InvitForm (qui est une formset) soit remplacé par la classe du formulaire que tu utilises dans InvitForm.
InvitFormSet.form = staticmethod(curry(InvitForm, event=Event.id))
Hors ligne
Bonjour,
Merci pour la réponse,
Mais le problème d'après ce que je comprends est que j'instancie le "modelformset_factory" avec "invitEvtGrp" qui n'est pas un "form" mais un "model", donc au final je ne sais pas comment accéder à l'instance "form" du "model" associé au "modelformset_factory".
Bref, je ne comprend toujours pas....
Si vous avez une explication, Xavier, je serais ravi de vous lire.
Cordialement
Dernière modification par torrak (17-05-2013 10:02:37)
Hors ligne
Bonjour,
En réorganisant mon code et en faisant un "modelform" j'obtiens le résultat attendu,
Voici mon code:
class InvitForm(ModelForm):
class Meta:
model = invitEvtGrp
def __init__(self, event = None, *args, **kwargs):
.....
etc...
InvitFormSet = modelformset_factory(invitEvtGrp , form = InvitForm, extra = 0, max_num = InvitGroupes.count())
InvitFormSet.form = staticmethod(curry(InvitForm, event=Event.id))
Merci Xavier Ordoquy pour vos explications.
Ce post peut être considéré comme résolu.
Hors ligne