dilwaria dilwaria - 5 months ago 38
Python Question

Where to write the save function in Django?

Where to write my save function in django whether in models.py in a class model or in forms.py in form ?

For example :

class Customer(models.Model):
name = models.CharField(max_length=200)
created_by = models.ForeignKey(User)

def save():
........ some code to override it.......


class Addcustomer(forms.ModelForm):
class Meta:
model = Customer
fields = ('name',)
def save():
........code to override it....

where shall i override my save function


It really depends on what you are trying to achieve. Default realization of ModelForm's save calls Model's save. But it is usually better to override it on form because it also runs validation. So if you are already using form I would suggest overriding ModelForm.save. And by overriding I mean extending using super

Here is default realization of ModelForm.save

def save(self, commit=True):
    Save this form's self.instance object if commit=True. Otherwise, add
    a save_m2m() method to the form which can be called after the instance
    is saved manually at a later time. Return the model instance.
    if self.errors: # there validation is done
        raise ValueError(
            "The %s could not be %s because the data didn't validate." % (
                'created' if self.instance._state.adding else 'changed',
    if commit:
        # If committing, save the instance and the m2m data immediately.
        # If not committing, add a method to the form to allow deferred
        # saving of m2m data.
        self.save_m2m = self._save_m2m
    return self.instance

save.alters_data = True