Enforce custom validators during bulk edit

This commit is contained in:
Jeremy Stretch 2023-12-15 13:28:36 -05:00
parent 0dcead40e8
commit d592285b98
2 changed files with 11 additions and 5 deletions

View File

@ -86,14 +86,12 @@ class CustomValidator:
if name in m2m_fields:
if name in instance._m2m_values:
return instance._m2m_values[name]
elif instance.pk:
# TODO: Handle invalid attrs
if instance.pk:
return list(getattr(instance, name).all())
else:
return []
return []
# Raise a ValidationError for unknown attributes
elif not hasattr(instance, name):
if not hasattr(instance, name):
raise ValidationError(_('Invalid attribute "{name}" for {model}').format(
name=name,
model=instance.__class__.__name__

View File

@ -557,6 +557,14 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView):
elif name in form.changed_data:
obj.custom_field_data[cf_name] = customfield.serialize(form.cleaned_data[name])
# Store M2M values for validation
obj._m2m_values = {}
for field in obj._meta.local_many_to_many:
if value := form.cleaned_data.get(field.name):
obj._m2m_values[field.name] = list(value)
elif field.name in nullified_fields:
obj._m2m_values[field.name] = []
obj.full_clean()
obj.save()
updated_objects.append(obj)