Limit number of model instances to be created – django

I wanted to do something similar myself, and found that Django’s model validation provided a convenient hook for enforcement:

from django.db import models
from django.core.exceptions import ValidationError

def validate_only_one_instance(obj):
    model = obj.__class__
    if (model.objects.count() > 0 and
            obj.id != model.objects.get().id):
        raise ValidationError("Can only create 1 %s instance" % model.__name__)

class Example(models.Model):

    def clean(self):
        validate_only_one_instance(self)

That not only prevents the creation of new instances, but the Django admin UI will actually report that the creation failed and the reason was “Can only create 1 Example instance”(whereas the early return approach in the docs gives no indication as to why the save didn’t work).

Leave a Comment