[Django]-Django: Get previous value in clean() method

6👍

Why not take advantage of a ModelForm? Form data is saved in two steps:

  1. To the form instance
  2. To the model instance

So when you have a form:

class YourForm(forms.ModelForm):

    class Meta:
        model = CustomModel
        fields = ['count']

    def clean(self):
        cleaned_data = super().clean()
        count = cleaned_data.get('count')

        if count < self.instance.count:
            self.add_error('count', 'You cannot decrease the counter')

        return cleanded_data

You can then override the form within the django admin site.

2👍

There’s also a solution just using the model:

def clean(self):
    if self.pk:
        previous_count = self.__class__.objects.get(pk=self.pk).count
    else:
        previous_count = None       # If saving a new instance

self.__class__ access the model class and fetch the currently stored .count value.

Leave a comment