3. How to ensure that only one object can be created?

Sometimes you want to ensure that only one record can be created for a model. This is commonly required as application configuration store, or as a locking mechanism to access shared resources.

Let us convert our Origin model to be singleton.

class Origin(models.Model):
    name = models.CharField(max_length=100)

    def save(self, *args, **kwargs):
        if self.__class__.objects.count():
            self.pk = self.__class__.objects.first().pk
        super().save(*args, **kwargs)

What did we do? We overrode the save method, and set the pk to an existing value. This ensures that when create is called and any object exists, an IntegrityError is raised.

Back to Top