我的问题是如何更轻松地设计我的数据库方案?
我有三种模式:
class Project(models.Model):
name = models.CharField('Name')
tasklists = models.ManyToManyField(Tasklist)
class Tasklist(models.Model):
name = models.CharField('Name')
class Task(models.Model):
name = models.TextField('Name')
tasklist = models.ForeignKey(Tasklist)
所以,想法是我有一个项目,可能有很多任务列表(并且在每个任务列表中可能有几个任务)。此外,相同的任务列表可能涉及具有相同任务的多个项目。
但我需要的是保存特定项目的任务状态。所以,让我们说,我有两个项目,它们具有相同的基本任务列表和两个任务,但在第一个项目中,我已经完成了所有任务,但不是第二个。我应该在哪里存储特定于每个项目的任务状态? 提前感谢您的帮助!
项目1 - >基本任务列表 - >任务1(完成)任务2(完成)
项目2 - >基本任务列表 - >任务1(活动)任务2(活动)
我的猜测是创建另一个这样的模型:
class TaskState(models.Model):
task = models.ForeignKey(Task)
project = models.ForeignKey(Project)
done = models.BooleanField(default=False)
答案 0 :(得分:2)
这里要保存多对多数据库的关系状态。这是一个教科书案例,您的解决方案是处理此类情况的最佳方式。这将允许您将来拥有与此关系对应的其他字段。以下是记录关系状态的标准做法:
答案 1 :(得分:2)
你的方法可能是一种方法,不要以为你可以避免额外的桌子。
您基本上是通过额外字段声明新的多对多关系,因此您可以将其声明为see docs:
class Project(models.Model):
task_states = models.ManyToManyField(Task, through='TaskState')