这更像是一个数据库设计问题,而不是一个具体的Django问题。
我们有一个小型的Django应用程序来管理年度会议。
有些模型对于每年的会议都是通用的。例如,工作坊经常每年重复,我们也经常使用相同的房间(研讨会或住宿房间)。
对于这些模型,它们的某些字段从一年到另一年是通用的,而另一些字段会有所变化。
例如,每个
有一个要求需要保留历史数据,但如果可能的话,我们也想减少冗余的重复,并节省每年重新输入的时间(例如房间的名称、位置和特色。同样适用于工作坊)
我的初始方法只是创建一个存储通用数据的AccomodationRoom,然后例如一个BedAvailability存储短暂的年度信息,并提供链接到每年的会议。例如:
我们有一个小型的Django应用程序来管理年度会议。
有些模型对于每年的会议都是通用的。例如,工作坊经常每年重复,我们也经常使用相同的房间(研讨会或住宿房间)。
对于这些模型,它们的某些字段从一年到另一年是通用的,而另一些字段会有所变化。
例如,每个
AccomodationRoom
都有一个名称、一个建筑物和一些特性,这些特性在每年都是通用的。但是,其他事情,比如实际的床位可用性,将会因年份而异。有一个要求需要保留历史数据,但如果可能的话,我们也想减少冗余的重复,并节省每年重新输入的时间(例如房间的名称、位置和特色。同样适用于工作坊)
我的初始方法只是创建一个存储通用数据的AccomodationRoom,然后例如一个BedAvailability存储短暂的年度信息,并提供链接到每年的会议。例如:
class AccommodationRoom(models.Model):
name = models.CharField(max_length=50)
site = models.ForeignKey(Site)
features = models.ManyToManyField(AccommodationFeature, null=True, blank=True)
class BedAvailability(models.Model):
number_of_single_beds = models.IntegerField()
number_of_double_beds = models.IntegerField()
conference = models.ForeignKey(Conference)
accommodation_room = models.ForeignKey(AccommodationRoom)
class Conference(models.Model):
year = models.CharField(max_length=4) # Example
然而,另一种方法是放弃这两种模型,只使用一个AccomodationRoom模型,其中包含所有内容,直接将其与Conference模型链接,并在AccomodationRoom.name和AccomodationRoom.Conference上强制执行唯一性。
class AccommodationRoom(models.Model):
name = models.CharField(max_length=50)
site = models.ForeignKey(Site)
features = models.ManyToManyField(AccommodationFeature, null=True, blank=True)
conference = models.ForeignKey(Conference)
number_of_single_beds = models.IntegerField()
number_of_double_beds = models.IntegerField()
class Meta:
ordering = ['conference', 'name']
unique_together = (("name", "conference"),)
或许还有更好的方法,我没有想到?欢迎提出建议。
谢谢, Victor