我的问题是我有一个模型,可以使用两个外键之一来说明它是哪种模型。我希望它至少要拿一个,但不能两个都拿。我可以让它仍然是一个模型还是应该将其分为两种类型。这是代码:
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=TrueFK字段中的部分意味着Inspection一个给定GroupID或一个实例只能存在一个SiteID实例-IOW,这是一对一关系,而不是一对多关系。这真的是您想要的吗?
Inspection在Groupor Site和an 之间建立链接InspectionID,然后我可以InspectionReport针对该一种关系进行多次“检查” 。这样做是为了让我可以更轻松地对Date与一个Group或Site。相关的所有记录进行排序。希望是有道理的
Inspection类,然后将子类SiteInspection,并GroupInspection针对非中的常见部位。