Копирование экземпляров модели django с внешними связанными ключами - PullRequest
0 голосов
/ 07 октября 2018

Пытался заставить это работать целую вечность без удачи.У меня есть 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()

Это скопирует все детали и поместит их на верхний уровень для нового проекта.

Я бы хотел иметь возможностьскопируйте также группы и скопируйте части в эти группы.

Вытяните мне волосы за волосы!

...