Estoy tratando de manejar tanto agregar nuevo como editar objeto. Mi archivo views.py es como-
personal_data=Personal.objects.create(emp_fname=first_name, emp_mname=middle_name, emp_lname=last_name) # rest of object is created here try: print "pk", pk with transaction.atomic(): if pk != None: print "hey" #save model goes here messages.add_message(request, messages.INFO, 'Data updated successfully') else: print "hello" personal_data.save() family_data.save() address_data.save() education_data.save() pre_company_data.save() messages.add_message(request, messages.INFO, 'Data saved successfully') except IntegrityError: handle_exception()La condición if-else funciona correctamente pero los datos se guardan en ambos casos. incluso si comenté el código que se muestra arriba, los datos van a la base de datos.
Si quiere decir que personal_data se guarda en ambos casos, es porque está llamando a Personal.objects.create , que crea y guarda el modelo en la base de datos en un solo paso (referencia: https://docs.djangoproject.com/en /dev/topics/db/queries/#creating-objects ). Si desea separar la creación del guardado, cree el modelo utilizando el constructor habitual:
personal_data = Personal(emp_fname=first_name, emp_mname=middle_name, emp_lname=last_name) try: with transaction.atomic(): if pk != None: # do stuff else: personal_data.save() # do some other stuff except IntegrityError: handle_exception()En este caso, el modelo de datos_personales se guardará solo en la rama else.