2017-04-15 45 views
2

我正在尝试处理添加新对象和编辑对象。我的views.py文件是喜欢 -在基于类的视图中使用@ transaction.atomic保存模型

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

仅供参考,如果pk!= None:'如果pk不是None'则替换'。 –

+0

@nik_m没有任何区别:) –

回答

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分支。

+0

如何使用过滤器创建对象并更新您喜欢的内容? –

+0

“使用过滤器创建对象”是什么意思? –

相关问题