我的问题是我有一个模型,可以使用两个外键之一来说明它是哪种模型。我希望它至少要拿一个,但不能两个都拿。我可以让它仍然是一个模型还是应该将其分为两种类型。这是代码:
class Inspection(models.Model):
InspectionID = models.AutoField(primary_key=True, unique=True)
GroupID = models.ForeignKey('PartGroup', on_delete=models.CASCADE, null=True, unique=True)
SiteID = models.ForeignKey('Site', on_delete=models.CASCADE, null=True, unique=True)
@classmethod
def create(cls, groupid, siteid):
inspection = cls(GroupID = groupid, SiteID = siteid)
return inspection
def __str__(self):
return str(self.InspectionID)
class InspectionReport(models.Model):
ReportID = models.AutoField(primary_key=True, unique=True)
InspectionID = models.ForeignKey('Inspection', on_delete=models.CASCADE, null=True)
Date = models.DateField(auto_now=False, auto_now_add=False, null=True)
Comment = models.CharField(max_length=255, blank=True)
Signature = models.CharField(max_length=255, blank=True)
问题是Inspection
模型。这应该链接到组或站点,但不能链接到两者。目前,通过此设置,它同时需要两者。
我宁愿没有拆分此为两个几乎相同的车型GroupInspection
,并SiteInspection
,因此,保持它作为一个模型中的任何解决方案将是理想的。
unique=True
FK字段中的部分意味着Inspection
一个给定GroupID
或一个实例只能存在一个SiteID
实例-IOW,这是一对一关系,而不是一对多关系。这真的是您想要的吗?
Inspection
在Group
or Site
和an 之间建立链接InspectionID
,然后我可以InspectionReport
针对该一种关系进行多次“检查” 。这样做是为了让我可以更轻松地对Date
与一个Group
或Site
。相关的所有记录进行排序。希望是有道理的
Inspection
类,然后将子类SiteInspection
,并GroupInspection
针对非中的常见部位。