2012-09-03 2 views
3

저는 장고 모델을 작성 중이며 데이터베이스에 존재할 수있는 레코드 수를 제한하려고합니다. 예를 들어 라디오를 가지고 있고 구성 가능한 6 개의 스테이션을 가질 수 있다고 가정 해 봅시다. 데이터베이스의 스테이션 수를 제한하는 가장 좋은 방법은 무엇입니까?모델의 레코드 수를 제한하십시오.

+2

모든 데이터베이스 백엔드에 행 제한 기능이 있다고 생각하지 않지만 왜 데이터베이스 수준에서이 옵션을 원하십니까? 프로그램을 사용하는 사람들이 db에 직접 액세스합니까? 한계를 처리하기 위해 모델 저장 또는 양식 저장 기능을 사용할 수없는 이유는 무엇입니까? –

+0

명확한 질문 : 영구적 인 스테이션 번호 또는 사용자가이 번호를 구성 할 수 있습니까? – sergzach

+0

영구적 인 번호로 구성 할 수 없습니다. –

답변

4

save method을 무시하고 각 라디오에 대해 6 개의 스테이션 만 있는지 확인하여 구현합니다. 일곱 번째 스테이션이 추가되면 적절한 오류 메시지와 함께 저장을 중단 할 수 있습니다.

+0

정확한지 알고 싶으면 추가 '선택'을해야 횟수가 정확한지 알아야합니다. – sergzach

0

이 경우 단일 인스턴스 (singletone 형)로 하나의 라디오 모델을 만들고 일대일 필드로 6 개의 스테이션을 만들 수 있습니다. 가능한 결정을 참조하십시오.

이점은 각 스테이션에 대한 임의 액세스을 가질 수 있다는 것입니다. 더 이상 검사가 없습니다.

class RadioHasNotStationError(Exception): 
    pass 

class _Station(models.Model): # private model, so, you can't use the class anywhere else 
    # fields of station 

class Radio(models.Model): 
    station1 = models.OneToOneField(_Station) 
    station2 = models.OneToOneField(_Station) 
    station3 = models.OneToOneField(_Station) 
    station4 = models.OneToOneField(_Station) 
    station5 = models.OneToOneField(_Station) 
    station6 = models.OneToOneField(_Station) 

    def set_station(self, num, val): 
     try: 
      setattr(self, 'station{0}'.format(num), val) 
     except AttributeError: 
      raise RadioHasNotStationError("The radio has not station {0}".format(num)) 

    def get_station(self, num): 
     try: 
      result = getattr(self, 'station{0}'.format(num)) 
     except AttributeError: 
      raise RadioHasNotStationError("The radio has not station {0}".format(num)) 
    ... 
    @staticmethod 
    def get_inst(): 
     try: 
      result = Radio.objects.select_related().get(id = 1) 
     except Radio.DoesNotExist: 
      result = Radio.create() 
     return result 

radio = Radio.get_inst() 
radio.station1 = new_station 
# ... 
radio.set_station(5, new_station2) 
# ... 
station4 = radio.get_station(4) 
# ... 
radio.save() 
관련 문제