2015-04-20 1 views
0

Je suis en train d'enregistrer un champ m2m dans un FormView.Enregistrer m2m dans FormView django

Voici mon code:

class ProductorPropietarioView(FormView): 
    form_class = FormPropietario 
    success_url = '/' 
    template_name = 'productores/propietario.html' 

    def form_valid(self,form):  
     form.save(commit=False) 
     form.save() 
     form.save_m2m() 
     return super(ProductorPropietarioView,self).form_valid(form) 

models.py

class Persona(models.Model): 
    predio = models.ForeignKey(InfoPredioGeneral,related_name='predio+') 
    rol = models.ManyToManyField(RolPersona) 
    tipo_identificacion = models.ForeignKey(TipoIdentificacion,related_name='tipo identificacion+',blank=True,null=True) 
    numero_identificacion = models.CharField(max_length=100,blank=True,null=True) 

forms.py

class FormPropietario(ModelForm): 
    class Meta(): 
     model = Persona 
     fields = '__all__' 

Je ne peux pas obtenir ce travail. Je sais que je dois d'abord mettre False puis enregistrer le formulaire et ensuite enregistrer le m2m. J'ai déjà essayé seulement avec form.save()

Qu'est-ce que je fais mal?

+1

Utilisez-vous un 'ModelForm'? En outre, il n'est pas nécessaire de faire 'form.save (commit = False)'. Vous pouvez simplement appeler 'form.save()' puis toutes les données, y compris les données many-to-many à enregistrer. –

+0

@RodXavier Oui, un ModelForm, je déjà essayé seulement avec form.save() mais ne sauve pas \t 'def form_valid (auto, forme): \t \t \t \t form.save() \t \t super retour (ProductorPropietarioView, self) .form_valid (formulaire) ' – dfrojas

+0

Pouvez-vous poster votre formulaire et les modèles concernés ici? –

Répondre

1

Essayez de changer FormView comme suit:

def form_valid(self,form):  
     f = form.save(commit=False) 
     f.save() 
     form.save_m2m() 
     return super(ProductorPropietarioView,self).form_valid(form)