我正在尝试处理添加新对象和编辑对象。我的views.py文件就像 -
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()
if-else条件正常工作但两种情况下都保存了数据。即使我评论了上面显示的代码,数据仍会传输到数据库。
答案 0 :(得分:1)
如果您的意思是在两种情况下都保存了personal_data,那是因为您正在调用Personal.objects.create
,它会在一个步骤中创建并保存模型(参考:https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects) 。如果要将创建与保存分开,请使用通常的构造函数创建模型:
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()
在这种情况下,personal_data模型将仅在 中保存在else分支中。