0
このコードブロックを改善するにはどうすればよいですか?Djangoで複数のオブジェクトを作成するより良い方法
すべてを保存する必要がありますか?複数のtry..exceptブロックを使用しますか?また、「作成」段階のいずれかで失敗した場合、以前に作成された残りのオブジェクトがロールバックされるように、トランザクション全体をロールバックする方法もあります。
@login_required
def admin_import_residents_confirm(request, comp_slug, file_id):
comp = get_object_or_404(Comp, slug=comp_slug)
file = get_object_or_404(ResidentImportFile, id=file_id)
resident_list = ResidentImportData.objects.filter(comp=comp,
file=file)
if request.method == 'POST':
for resident in resident_list:
try:
# create the user objects here
pw = User.objects.make_random_password(length=6,
allowed_chars='1234567890')
fusername = '{0}{1}{2}'.format(resident.first_name,
resident.last_name,
re.sub('\D', '', resident.unit_number))
user = User.objects.create(
username = fusername,
password = pw,
first_name = resident.first_name,
last_name = resident.last_name)
# second create the profile objects
Profile.objects.create(user=user,
contact_number=resident.contact_number)
# third create the role objects
role = Role.objects.filter(comp=comp,
name=2)[0]
role.user.add(user)
# fourth create the usercomp object
Usercomp.objects.create(
user=user,
comp=comp,
unit_number=resident.unit_number,
block_number=resident.block_number)
# fifth store the one time passwords
TempPasswords.objects.create(
user=user,
password=pw)
# sixth update created status
resident.is_created = True
resident.save()
except Exception, e:
print e
url = reverse('admin_import_residents_confirm',
args=[comp.slug, file.id ])
return redirect(url)
url = reverse('admin_resident_list', args=[comp.slug])
return redirect(url)
3行目で例外が発生します。 – DrTyrsa
コードにどのような問題がありますか?なぜ誰かが失敗するでしょうか?それは以前に失敗しましたか? –