transactions django handles transactions in three different ways the default is to commit each transaction upon a write but you can decorate a function to get commitonsuccess behavior alternatively you can manage the transaction manually
from django.db import models


class Reporter(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    class Meta:
        ordering = ("first_name", "last_name")

    def __str__(self):
        return ("%s %s" % (self.first_name, self.last_name)).strip()