假设我有一个看起来像这样的django-mptt模型:
class Category(MPTTModel):
name = models.CharField(max_length=50)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
这些类别(和子类别)将作为项目中使用的类别的一种模板。当用户启动新项目时,用户将选择要使用的分类,子类别等。用户还应该能够添加/编辑类别。问题是他们需要特定于项目,以便在创建另一个项目时,用户将从原始/默认类别开始。
有没有办法复制MPTTModel /数据库表来创建项目特定的表,可以编辑/添加类别而不影响默认类别?
我可以想出一种方法来解决这个问题,即添加像
这样的东西projects = models.ManyToManyField(Project)
并创建一个默认/模板项目。 这里最好的方法是什么?
答案 0 :(得分:0)
您有正确的想法,有一个“项目”字段,以匹配具有各种项目的类别。使用具有ForeignKey关系的“项目”字段可能会更好:
project = models.ForeignKey(project)
然后,您可以复制类别,为每个新项目创建一个新的数据库行。这样,如果在项目foo上工作的人改变了类别栏,它就不会影响也可能使用类别栏的项目baz。两个类别栏条目在数据库中都有不同的主键。
您还可以拥有一个名为“默认”的项目,只要用户创建新项目,所有“默认”类别就会重复。
当然,您需要代码才能显示您的用户正在处理的项目中的类别,并在创建新项目时复制类别。