데이터베이스 모델을 사용하여 프로젝트의 일부 구성 설정을 제어하고 싶습니다. 예를 들어 :Django에서 하나의 모델 인스턴스 만 허용
이class JuicerBaseSettings(models.Model):
max_rpm = model.IntegerField(default=10)
min_rpm = model.IntegerField(default=0)
만이 모델의 인스턴스가 있어야한다 : 누군가가 실수로 새 인스턴스를 만드는 경우 물론
juicer_base = JuicerBaseSettings()
juicer_base.save()
, 그것은 세상의 종말이 아니다. 나는 단지 JuicerBaseSettings.objects.all().first()
을 할 수 있었다. 그러나 인스턴스를 두 개 이상 만들지 못하도록 잠글 수있는 방법이 있습니까?
나는 두 가지 관련 질문을 발견했습니다. This answer은 django-singletons
과 같은 타사 앱을 사용하도록 제안합니다.이 앱은 적극적으로 유지 관리되지 않는 것 같습니다 (git repo의 마지막 업데이트는 5 년 전입니다). Another answer은 사용 권한 또는 OneToOneField
의 조합을 사용하도록 제안합니다. 두 답변은 2010-2011 년입니다.
그 이후로 Django가 많이 바뀌었다면이 문제를 해결할 표준 방법이 있습니까? 아니면 그냥 .first()
을 사용하고 중복 될 수 있다고 받아 들여야합니까? 나는 전문가가 아니다
class JuicerBaseSettings(models.Model):
def save(self, *args, **kwargs):
if JuicerBaseSettings.objects.exists() and not self.pk:
# if you'll not check for self.pk
# then error will also raised in update of exists model
raise ValidationError('There is can be only one JuicerBaseSettings instance')
return super(JuicerBaseSettings, self).save(*args, **kwargs)
을 ... 또는'갔지을 할 수있는 (PK = 1)'대신 ... – Bakuriu
이것은 데이터베이스에 전혀 존재하지 않아야합니다. – e4c5
@ e4c5 합리적입니다.하지만 소규모 프로젝트에서는 관리자가 클라이언트 변경을 허용하는 사이트 설정과 항상 직면 해 있습니다. 예를 들어 전화 번호 또는 기타 프로젝트 관련 항목이 있습니다. 어쩌면 당신은 더 나은 방법을 가리킬 것입니다 –