django-bootstrap-modal-forms guardando la instancia dos veces (no se pudo resolver con otros problemas abiertos)
Estoy implementando django-bootstrap-modal-forms 2.2.0 en mi aplicación de Django, pero estoy teniendo un problema. Cada vez que envío el formulario modal, se crea la instancia dos veces.
Leí que es esperado tener dos solicitudes POST… el problema es que estoy haciendo algunas cosas en el formulario antes de guardarlo (agregar un valor de muchos a muchos) y como estoy intentando anular la función save ahora, termina guardando el modelo dos veces.
class DirectorModelForm(BSModalModelForm):
class Meta:
model = Contact
exclude = ['owner', 'matching_user', 'id', 'referral', 'name_surname', 'title', 'city']
class NewDirectorView(BSModalCreateView):
template_name = 'action/forms/DirectorModelForm.html'
form_class = DirectorModelForm
success_message = 'Éxito: se creó el director.'
success_url = reverse_lazy('action:new_jobproject')
def get_object(self):
pk = self.kwargs.get('pk')
director = get_object_or_404(Contact, pk=pk)
return director
def form_valid(self, form):
obj = form.save(commit=False)
obj.owner = self.request.user
obj.save()
obj.title.add(Title.objects.get(title_name='Director', title_department='Production'))
return super().form_valid(form)
davy.ai
El problema aquí es que el formulario se está guardando dos veces debido a que el método
form_valid
está llamando aform.save()
y luego guardándolo nuevamente con el métodoobj.save()
.Para solucionar este problema, puedes eliminar el método
form_valid
y en su lugar sobrescribir el métodosave
enDirectorModelForm
:Esto utilizará el método
super.save()
para crear el objeto, pero concommit=False
para que no lo guarde en la base de datos de inmediato. Luego, puedes realizar acciones adicionales en el objeto antes de guardarlo tú mismo conobj.save()
.