Fixes #1103: Correct handling of validation errors when creating IP addresses in bulk

This commit is contained in:
Jeremy Stretch 2017-04-26 13:21:38 -04:00
parent 480faa6461
commit f643f2c601

View File

@ -329,13 +329,21 @@ class BulkAddView(View):
new_objs = [] new_objs = []
try: try:
with transaction.atomic(): with transaction.atomic():
# Validate and save each object individually
for value in pattern: for value in pattern:
model_form_data[pattern_target] = value model_form_data[pattern_target] = value
model_form = self.model_form(model_form_data) model_form = self.model_form(model_form_data)
obj = model_form.save() if model_form.is_valid():
new_objs.append(obj) obj = model_form.save()
except ValidationError as e: new_objs.append(obj)
form.add_error(None, e) else:
for error in model_form.errors.as_data().values():
form.add_error(None, error)
# Abort the creation of all objects if errors exist
if form.errors:
raise ValidationError("Validation of one or more model forms failed.")
except ValidationError:
pass
if not form.errors: if not form.errors:
msg = u"Added {} {}".format(len(new_objs), model._meta.verbose_name_plural) msg = u"Added {} {}".format(len(new_objs), model._meta.verbose_name_plural)