Python Django:如果连续插入多个模型,如何在数据库中实现事务回滚?
我是Django的新手,我在互联网上搜索过这个话题,但我不理解。基本上,我正在创建一个学生用户,它将链接到Django中的内置用户模型。在我的代码中,我首先在用户模型中创建用户,然后在StudentUser模型中创建它。但是,如果发生错误,可能不是创建了StudentUser,我想撤消用户中的更改。如何通过回滚来解决这个问题 以下是我的代码片段: views.pyPython Django:如果连续插入多个模型,如何在数据库中实现事务回滚?,python,django,database,transactions,Python,Django,Database,Transactions,我是Django的新手,我在互联网上搜索过这个话题,但我不理解。基本上,我正在创建一个学生用户,它将链接到Django中的内置用户模型。在我的代码中,我首先在用户模型中创建用户,然后在StudentUser模型中创建它。但是,如果发生错误,可能不是创建了StudentUser,我想撤消用户中的更改。如何通过回滚来解决这个问题 以下是我的代码片段: views.py def user_signup(request): if request.method == 'POST':
def user_signup(request):
if request.method == 'POST':
# Signup for student
if(request.POST['stud_fname']):
stud_fname = request.POST['stud_fname']
stud_lname = request.POST['stud_lname']
stud_uni = request.POST['stud_uni']
stud_email = request.POST['stud_email']
stud_password = request.POST['stud_passwd']
try:
user = User.objects.create_user(first_name=stud_fname, last_name=stud_lname,
username=stud_email, password=stud_password)
StudentUser.objects.create(user=user, university=stud_uni, user_type="Student")
messages.success(request, "Account successfully created. You can now log in")
return redirect('login')
except:
messages.error(request, "Failed to create account. Try again!")
return render(request, 'signup.html')
else:
return render(request, 'signup.html')
您可以将transaction.atomic()用于希望创建全部或无的db查询。我已经编写了代码片段,您可以从这里参考:-
from django.db import transaction
def user_signup(request):
if request.method == 'POST':
# Signup for student
if(request.POST['stud_fname']):
stud_fname = request.POST['stud_fname']
stud_lname = request.POST['stud_lname']
stud_uni = request.POST['stud_uni']
stud_email = request.POST['stud_email']
stud_password = request.POST['stud_passwd']
try:
with transaction.atomic():
user = User.objects.create_user(first_name=stud_fname, last_name=stud_lname, username=stud_email, password=stud_password)
StudentUser.objects.create(user=user, university=stud_uni, user_type="Student")
messages.success(request, "Account successfully created. You can now log in")
return redirect('login')
except:
messages.error(request, "Failed to create account. Try again!")
return render(request, 'signup.html')
else:
return render(request, 'signup.html')
您是否尝试实现数据库事务@AlbinPaul,不,我不知道在这种情况下如何做。如果发生任何错误,它是否也适合回滚?