在基于类的视图中使用 @transaction.atomic 保存模型



我正在尝试处理添加新对象和编辑对象。我的 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 条件工作正常,但在两种情况下都会保存数据。 即使我注释了上面显示的代码,数据仍然会进入数据库。

如果您的意思是在这两种情况下都保存了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 分支中。

最新更新