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 예외가 발생하도록 합니다.