# for M2M fields override clean() method of forms.ModelForm
# (instead of clean() method of models.Model) to get access
# to both already saved and updated values
class DjangoModelForm(forms.ModelForm):
class Meta:
model = DjangoModel
fields = ('field1', 'field2', 'field3')
def clean(self):
super(DjangoModelForm, self).clean()
field1_saved = None
field1_updated = self.cleaned_data.get('field1')
if self.instance.pk:
# already saved instance
field1_saved = self.instance.field1
if field1_saved != field1_updated:
raise forms.ValidationError("Custom error message")
return self.cleaned_data
@admin.register(DjangoModel)
class DjangoModelAdmin(admin.ModelAdmin):
form = DjangoModelForm
list_display = (
"id", "field1", "field2", "field3"
)