Дублирование модели Django с вложенными дочерними элементами

У меня есть модель с вложенными детьми и я хочу продублировать ее, я попробовал несколько решений, но не смог решить свою проблему!

вот мои модели, чтобы показать взаимоотношения между ними:

class Form(models.Model):
    form_id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    form_title = models.CharField(max_length=100)

class Page(models.Model):
    page_id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    page_title = models.CharField(max_length=100)
    form = models.ForeignKey(Form, related_name='pages')

class Section(models.Model):
    section_id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    section_title = models.CharField(max_length=100)
    page = models.ForeignKey(Page, related_name='sections')

class Question(models.Model):
    question_id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    question_title = models.CharField(max_length=100)
    section = models.ForeignKey(Section, related_name='questions')

class Answer(models.Model):
    answer_id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
    answer_value = models.TextField(blank=True)
    question = models.OneToOneField(Question, related_name="question")

Я использовал это решение, я мог дублировать форму и страницы, но не мог перейти к дублированию других детей!

class DuplicateFormAPI(views.APIView):

    def get(self, request, form_id):

        form = Form.objects.filter(form_id=form_id).first()
        form.form_id = None
        form.save()

        duplicated_form_id = FormSerializer(form).data.get('form_id')

        pages = Page.objects.filter(form_id=form_id).all()

        for page in pages:
            page.page_id = None
            page.form_id = duplicated_form_id
            page.save()

        return Response({
            "status": status.HTTP_200_OK,
            "message": "Form duplicated successfully!",
            "form": FormSerializer(form).data,
        })

Кто-нибудь может помочь или подсказать?

Вернуться на верх