私の問題は、2つの外部キーのいずれかを使用して、どのようなモデルであるかを示すことができるモデルがあることです。両方ではなく、少なくとも1つは取得したい。これを1つのモデルのままにすることはできますか、それとも2つのタイプに分割する必要がありますか?これがコードです:
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
モデルです。これはグループまたはサイトのいずれかにリンクする必要がありますが、両方にリンクすることはできません。現在、この設定では両方が必要です。
私はむしろ2つの、ほぼ同一のモデルにこれを分割する必要はないと思いますGroupInspection
し、SiteInspection
一つのモデルとして、それを続けて任意のソリューションが理想的であるので、。
unique=True
FKフィールドの部分は、1つのInspection
インスタンスGroupID
またはSiteID
インスタンスに対して存在できるインスタンスが1つだけであることを意味します。つまり、1対1の関係であり、1対多の関係ではありません。これは本当にあなたが欲しいものですか?
Inspection
間にリンクを持つことであり、その1つの関係の形で複数の「検査」を行うことができます。これは、1つまたはに関連するすべてのレコードをより簡単にソートできるようにするために行われました。それが理にかなっているとGroup
Site
InspectionID
InspectionReport
Date
Group
Site
Inspection
クラスを作成しSiteInspection
てGroupInspection
から、非共通部分にサブクラスを作成できます。