2010-02-08 5 views
1

장고 앱에 3 가지 모델이 있습니다. 각 모델에는 "호스트 이름"필드가 있습니다. 몇 가지 이유를 들어, 다음은 다른 모델에 추적 : 나는 확실히 호스트 이름 필드를 만들기 위해 확인을 위해 설정하는 방법Django 1.1.1, 다른 필드에 종속적 인 사용자 정의 유효성 검사가 필요합니다.

class device(models.Model): 
... 
hostname = models.CharField(max_length=45, unique=True, help_text="The hostname for this device") 
... 

class netdevice(models.Model): 
... 
hostname = models.CharField(max_length=45, unique=True, help_text="Name Associated with Device", verbose_name="Hostname") 
... 

class vipdevice(models.Model): 
... 
hostname = models.CharField(max_length=45, unique=True, help_text="Name associated with this Virtual IP", verbose_name="name") 
... 

은 3 개 모델의 걸쳐 중복되지?

나는 http://docs.djangoproject.com/en/dev/ref/validators/#ref-validators을 보았지만 올바른 경로인지 확실하지 않습니다. 함수 내에서 다른 클래스의 객체를 만드는 경우 특히 유용합니다.

+0

단지 유효성 검사기가 장고'1.2'에 도입되어'1.1.1'에서 사용할 수 없다는 것을 지적하고 싶습니다. –

답변

3

Model Inheritance을 사용할 수 있습니다. 그래서 같이 :

class BaseDevice(models.Model): #edit: introduced a base class 
    hostname = CharField(max_length=45, unique=True, help_text="The hostname for this device") 

class Device(BaseDevice): 
    pass 

class NetDevice(BaseDevice): 
    #edit: added attribute 
    tracked_item=models.ForeignKey(SomeItem) 

class VipDevice(BaseDevice): 
    #edit: added attribute 
    another_tracked_item=models.ForeignKey(SomeOtherItem) 

abstract 모델로 BaseDevice을 정의하지 마십시오.

+0

나는 그것에 대해 생각해 보았습니다. 그러나 나는 그것들을 모두 나눠 놓은 이유는 3 가지 다른 장치 유형에는 추적이 필요한 다양한 항목이 있습니다. 1.1.1에서이 방법이 있습니까? – jduncan

+0

다른 옵션은 폼과 뷰를 생성하고 거기에서 추가 유효성 검사를 처리하는 것입니다. 그러나 도메인 내에서이 작업을 수행 할 수 있다면 심각 할 것입니다. – jduncan

+0

'추적이 필요한 다른 항목이 있음'을 말하면 '다른 속성을 가짐'을 의미하는 경우 이것이 정확히 원하는 것으로 가정합니다. 내가 틀렸다면 어떻게하고 싶은지 설명해보십시오. – tback