1717from django .core .cache import cache
1818from django .core .exceptions import ObjectDoesNotExist , ValidationError
1919from django .core .mail import send_mail
20- from django .db import models
20+ from django .db import models , transaction
2121from django .db .models import ProtectedError , Q
2222from django .utils import timezone
2323from django .utils .crypto import get_random_string
@@ -985,16 +985,17 @@ def clean(self):
985985 def add (self , reader , password_length = BATCH_DEFAULT_PASSWORD_LENGTH ):
986986 users_list = []
987987 generated_passwords = []
988- for row in reader :
989- if len (row ) == 5 :
990- user , password = self .get_or_create_user (
991- row , users_list , password_length
992- )
993- users_list .append (user )
994- if password :
995- generated_passwords .append (password )
996- for user in users_list :
997- self .save_user (user )
988+ with transaction .atomic ():
989+ for row in reader :
990+ if len (row ) == 5 :
991+ user , password = self .get_or_create_user (
992+ row , users_list , password_length
993+ )
994+ users_list .append (user )
995+ if password :
996+ generated_passwords .append (password )
997+ for user in users_list :
998+ self .save_user (user )
998999 for element in generated_passwords :
9991000 username , password , user_email = element
10001001 send_mail (
@@ -1012,9 +1013,10 @@ def csvfile_upload(
10121013 csv_data = csvfile .read ()
10131014 csv_data = decode_byte_data (csv_data )
10141015 reader = csv .reader (StringIO (csv_data ), delimiter = "," )
1015- self .full_clean ()
1016- self .save ()
1017- self .add (reader , password_length )
1016+ with transaction .atomic ():
1017+ self .full_clean ()
1018+ self .save ()
1019+ self .add (reader , password_length )
10181020
10191021 def prefix_add (self , prefix , n , password_length = BATCH_DEFAULT_PASSWORD_LENGTH ):
10201022 users_list , user_credentials = prefix_generate_users (prefix , n , password_length )
0 commit comments