Limit number of model instances to be created - django

前端 未结 6 1530
萌比男神i
萌比男神i 2020-12-02 20:36

I have model from which I only want to create one instance, and no more instances should be allowed.

Is this possible? I\'ve got a feeling that I\'ve seen this done

6条回答
  •  青春惊慌失措
    2020-12-02 21:03

    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).

提交回复
热议问题