2016-10-31 5 views
0

Скажем, у меня есть модель Django-mptt, который выглядит следующим образом:Можно ли дублировать модель 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/database для создания конкретного проекта, где категории могут быть отредактированы/добавлены без изменения их значений по умолчанию?

я могу думать так, чтобы решить эту проблему, которая бы добавить что-то вроде

projects = models.ManyToManyField(Project) 

и создать проект по умолчанию/шаблон. Какой здесь лучший подход?

ответ

0

У вас есть правильная идея с полем «проекты», чтобы соответствовать категории с различными проектами. Вы могли бы быть лучше использовать поле «проект» с ForeignKey отношений:

project = models.ForeignKey(project) 

Тогда вы могли бы дублировать категорию, создавая новую строку базы данных, для каждого нового проекта. Таким образом, если кто-то, работающий над проектом foo, изменяет панель категорий, это не влияет на проект baz, который также может использовать панель категорий. Обе записи в строке категории будут иметь разные первичные ключи в базе данных.

У вас также может быть проект под названием «по умолчанию». Все «по умолчанию» категории могут дублироваться всякий раз, когда пользователь создает новый проект.

Конечно, вам понадобится код для отображения только категорий из проекта, над которым работает ваш пользователь, и для дублирования Категорий при создании нового проекта.

Смежные вопросы