我被卡住了,需要一些新的眼睛在我的模型设计。我似乎无法围绕如何最好地设计这个问题。Django模型设计使用ForeignKey和ManyToMany
REQS:
- 每个项目都可以有主动服务若干个等级的同时,与其他被设置为关闭。没有互斥
- 所有项目的层次都是一样的。
- 我需要跟踪特定项目上活动的层次。
我需要能够将项目的收费日期与活动层相关联。请参阅下面的收费日期澄清。- 项目和层'活动'字段不相关。
- 请参阅编辑以了解更多有关我的需求的想法。
这里的模型:
class Project(models.Model):
name = models.CharField('project name', max_length=128)
company = models.ForeignKey('Company', related_name='projects')
# A project could have more than one instance
instances = models.ManyToManyField(Instance, related_name='projects')
type = models.CharField(max_length=128, blank=True)
start_date = models.DateField(null=True, auto_now=False, auto_now_add=False)
end_date = models.DateField(null=True, auto_now=False, auto_now_add=False)
active = models.BooleanField()
class Tier(models.Model):
TIERS = (('TI1', 'tier1'),
('TI2', 'tier2'),
('TI3', 'tier3'),
('TI4', 'tier4'),
('TI5', 'tier5'))
name = models.CharField(max_length=3, choices=TIERS)
active = models.BooleanField()
class TierHistory(models.Model):
project = models.ForeignKey(Project, related_name='tier_history')
tiers = models.ManyToManyField(Tier)
charge_date = models.DateField(null=True, auto_now=False, auto_now_add=True)
contact = models.ForeignKey(Contact)
一个编辑来澄清一些事情:
我遇到的是,鉴于目前设计的问题,我不觉得我跟踪层次,以及他们是否以最佳方式活跃。这是所有这一切的主要目标;了解项目中哪些层次是活跃的,反过来能够看到哪些项目曾经活跃过任何特定层次。
鉴于我目前的设计,我不能设置2级活跃项目1和不活跃的项目2
- 一个项目可以有多个活动的层次同时进行。
- 收费日期将用于每一层。我意识到我读了我的规格错误。
- 我需要能够报告,“项目1已使用第1层为3个月,第2层为6个月,从未使用第5层”
- 我需要能够报告,“项目1和项目2有1级有源现在,项目1有4层活跃的1个月,项目3项,目前正在使用第5" 级
你说你被卡住了 - 这个设计是什么问题导致你?您提到项目的'a'收费日期,但由于'TierHistory'对'Project'有一个'ForeignKey',因此每个项目可以有多个'TierHistories'和'charge_dates' - 是您想要的吗? –
@KevinChristopherHenry,我对我最初的问题进行了编辑,以澄清我的问题并指定我需要每层的每层收费日期。 – yubus