3. Как сделать так, чтобы можно было создать только один объект?¶
Иногда вы хотите убедиться, что для модели может быть создана только одна запись. Обычно это требуется в качестве хранилища конфигурации приложения или в качестве механизма блокировки для доступа к общим ресурсам.
Давайте преобразуем нашу модель Origin
в синглтон.
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)
Что мы сделали? Мы переопределили метод save
и установили pk
в существующее значение. Это гарантирует, что при вызове create
и существовании любого объекта будет вызван IntegrityError
.