Hello, i'm currently doning a website where user can register (without password, without auth module of Django). They put some informations and at the end (Step5Form) do multiple choices by clicking on checkboxes. When I click on validate on the last step I've "instance needs to have a primary key value before a many-to-many relationship can be used" error. I've search the web to find a solution but ..... :- (
Here is my code: models.py for Customer (in clients application) --------------------------------------------- class Customer (models.Model): email_adresse = models.EmailField(max_length=255, unique=True) some fields ..... for Step2 to Step4 of the form category = models.ManyToManyField(Categories) --------------------------------------------- models.py for categories (in categories application) --------------------------------------------- class Categories (models.Model): category = models.CharField(max_length=200) def __unicode__(self): return unicode(self.category) --------------------------------------------- The ManyToMany field has created(syncdb) a table clients_customer_category with the following columns: 1 id int(11) AUTO_INCREMENT 2 customer_id int(11) 3 categories_id int(11) urls.py --------------------------------------------- urlpatterns = patterns('', (r'^clients/$', InscriptionWizard.as_view([Step1Form, Step2Form, Step3Form, Step4Form, Step5Form])), ) --------------------------------------------- forms.py (in clients application) --------------------------------------------- from django import forms from clients.models import Customer from categories.models import Categories class Step1Form(forms.Form): email_adresse = forms.EmailField(max_length=255) class Step5Form(forms.Form): category = forms.ModelMultipleChoiceField(queryset=Categories.objects.all(), widget=forms.CheckboxSelectMultiple, required=True) views.py (in clients application) --------------------------------------------- class InscriptionWizard(SessionWizardView): def done(self, form_list, **kwargs): instance = Customer() for form in form_list: for field, value in form.cleaned_data.iteritems(): setattr(instance, field, value) instance.save() --------------------------------------------- I got the following error: --------------------------------------------- Request Method: POST Request URL: http://127.0.0.1:8010/clients/ Django Version: 1.3.1 Exception Type: ValueError Exception Value: 'Customer' instance needs to have a primary key value before a many-to- many relationship can be used. ............... ............... ▶ Local vars C:\dev\Flash\clients\views.py in done setattr(instance, field, value) ... --------------------------------------------- What I've tried: 1)I've search the web and didn't find any way to solve this. I've read on save_m2m() wich doesn't apply here as far I understand because no "commit=False" and this form is not a ModelForm. 2)I've trie to save in 2 steps with the hope an id has been set in the DB: -First step : for form in form_list[0:3]: ...... instance.save() -Second step : for form in form_list[4]: for field, value in form.cleaned_data.iteritems(): instance.category.add(value) I've the following error : 'BoundField' object has no attribute 'cleaned_data' for the line "for field, value in form.cleaned_data.iteritems():" in Second step. Then I can maybe split my form in 2 forms, one from Step0 to Step3 and another one for Step4 and passing the id_customer in teh session but maybe there is a solution to solve this issue in one form. Help will be really appreciated. I apologize if my explanations are not enough clear (and for my english) and feel free to ask informations. Regards Alain -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.