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.

Вернуться на верх