現在我有以下模型,我想在不同的模型中使用(我想在不同的模型中存盤星期幾和時間):
class DayTime(models.Model):
# Side note: I saw that there is a DurationField and
# was considering using that instead of the CharField below
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
從檔案中,我必須ForeignKey 在上述模型中創建一個欄位以容納 ManyToOne 參考。
例子:
class DayTime(models.Model):
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
modelA = models.ForeignKey(ModelA, on_delete=models.SET_NULL)
modelB = models.ForeignKey(ModelB, on_delete=models.SET_NULL)
這對我來說聽起來不對。我應該創建不同的 DayTime 模型嗎?
提前致謝。
uj5u.com熱心網友回復:
按照您的設定方式,ModelA 可以有多個 DayTime,但一個特定的 DayTime 物件只能與一個 ModelA 物件相關聯(并且您可以創建另一個具有相同值的 DayTime 物件,除了 pk 和任何唯一欄位,并將其關聯DayTime 與另一個 ModelA 物件),雖然這對您來說似乎不合適,但這可能正是您想要的。檔案中的示例有一個文章物件,其中報告者作為外鍵,因為報告者可以有許多文章,但文章只有一個報告者。
class DayTime(models.Model):
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
modelA = models.ForeignKey(ModelA, on_delete=models.SET_NULL)
modelB = models.ForeignKey(ModelB, on_delete=models.SET_NULL)
在第二種方式中,許多 ModelA 物件可以有一個特定的 DayTime 物件,但是一個 DayTime 物件只能與一個 ModelA 物件相關聯(當然,這不會阻止您創建另一個具有相同欄位值的 DayTime 物件(除了pk,以及您使唯一的任何欄位)。對于 ModelB 也可以這樣說。
class DayTime(models.Model):
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
class ModelA(models.Model):
# some fields unique to ModelA
daytime = models.ForeignKey(DayTime, on_delete=models.SET_NULL)
class ModelB(models.Model):
# some fields unique to ModelB
daytime = models.ForeignKey(DayTime, on_delete=models.SET_NULL)
現在,如果您需要每個 ModelA 物件具有多個 DayTime 物件,并且您還需要一個特定的 DayTime 物件與許多 ModelA 物件相關聯,那么您將需要多對多關系:
class DayTime(models.Model):
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
class ModelA(models.Model):
# some fields unique to ModelA
daytime = models.ManyToManyField(DayTime)
class ModelB(models.Model):
# some fields unique to ModelB
daytime = models.ManyToManyField(DayTime)
uj5u.com熱心網友回復:
我正在DayTime根據需要為每個班級創建一個模型。我想創建一個更容易重用的模型,但如果是這樣,我可以創建一個抽象基類并實作它。到目前為止,無論如何我都不需要一個以上的模型。
例子
class DayTime(models.Model):
day = models.CharField(max_length=9, choices=DaysOfWeekTypeEnum.choices)
time = models.TimeField()
class Meta:
abstract = True
class DayTimeModelA(DayTime):
modelA = models.ForeignKey(
'ModelA', related_name="day_times", on_delete=models.CASCADE)
class DayTimeModelB(DayTime):
modelB = models.ForeignKey(
'ModelB', related_name="day_times", on_delete=models.CASCADE)
然后,這使我可以更輕松地擴展、創建特定的序列化程式等。如果我想基于一天使用兩種不同的模型進行查詢,我仍然可以這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400922.html
