Пытался заставить это работать целую вечность без удачи.У меня есть 3 модели
class Project(models.Model):
number = models.CharField(max_length=30, unique=True)
title = models.CharField(max_length=300)
client = models.CharField(max_length=300)
category = models.CharField(max_length=300, null=True)
.
.
etc
class ProjectGroup(models.Model):
description = models.CharField(max_length=300)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
group = models.ForeignKey('self', on_delete=models.CASCADE, null=True)
.
.
etc
class ProjectPart(models.Model):
number = models.CharField(max_length=30)
description = models.CharField(max_length=300)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
group = models.ForeignKey(ProjectGroup, null=True, blank=True,
on_delete=models.CASCADE)
.
.
etc
Проект содержит несколько групп, которые, в свою очередь, содержат части проекта.Группы могут содержать другие группы, подобные структуре папок.
Я пытаюсь скопировать экземпляр проекта, который скопирует все связанные экземпляры групп и частей и сохранит структуру типов папок.
пока у меня есть ..
def copyprojectview(request, project_id):
form = CopyProjectForm(request.POST)
if form.is_valid():
#get details for new project and create
number = form.cleaned_data['number']
title = form.cleaned_data['title']
client = form.cleaned_data['client']
category = form.cleaned_data['category']
project = Project.objects.create(number=number, title=title, client=client, category=category)
# get list of groups and parts to be copied to new project
parts = ProjectPart.objects.filter(project_id=project_id)
groups = ProjectGroup.objects.filter(project_id=project_id)
Тогда это то, что я застреваю.Копирование и попытка сохранить правильные отношения.Я могу скопировать все части без таких групп, как эта
for part in parts:
part.pk = None
part.group = None
part.project = project
part.save()
Это скопирует все детали и поместит их на верхний уровень для нового проекта.
Я бы хотел иметь возможностьскопируйте также группы и скопируйте части в эти группы.
Вытяните мне волосы за волосы!