LineType、Service、DomainName、Recordの3つのモデルがあり、それらの間にはm2mまたは外部キーの関係があります。コードは次のとおりです。
class LineType(models.Model):
linename = models.CharField(max_length=30,primary_key=True)
def __unicode__(self):
return self.linename
class Service(models.Model):
servicename = models.CharField(max_length=30,primary_key=True)
price = models.DecimalField(max_digits=8, decimal_places=2)
line = models.ManyToManyField(LineType)
def __unicode__(self):
return self.servicename
class DomainName(models.Model):
domainname = models.CharField(max_length=30,primary_key=True)
user = models.ForeignKey(SiteProfile)
service = models.ForeignKey(Service)
def __str__(self):
return self.domainname
class Record(models.Model):
TYPE_CHOICES = (
('A','A'),
('CNAME','CNAME'),
('MX','MX'),
)
domainname = models.ForeignKey(DomainName)
def get_line(self):
domain = DomainName.objects.get(pk=self.domainname_id)
service = Service.objects.get(pk=domain.service_id)
lines = service.line.all()
choices = []
for x in lines:
choices.append((x.linename,x.linename))
return choices
host = models.CharField(max_length=30)
type = models.CharField(max_length=5,choices=TYPE_CHOICES,default='A')
line = models.ForeignKey(LineType)
destaddress = models.CharField(max_length=30)
モデルを紹介します。各ドメイン名は、他のドメイン名が持つことができるサービスを1つだけ持つことができます。各DomainNameには複数のレコードがあります。サービスは、レコードに適用できるLineTypesを定義します。
私はDjangoadminを使用してこれらのモデルを管理していますが、Recordでの「行」の選択はすべてLineTypeオブジェクトです。したがって、問題は、親(DomainName)の「サービス」に従ってRecordのLineTypeをフィルタリングする方法です。