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