Próbuję utworzyć pełną kopię instancji ankiety, która ma kilka sekcji, a każda sekcja ma kilka pytań, a na końcu każde pytanie ma kilka opcji. Używam standardowego django 1.3.1, z MySQL. Muszę mieć możliwość utworzenia pełnej kopii wszystkich tych elementów, dla innego właściciela ankiety. Co obecnie mam w widoku jest:Jak utworzyć głęboki klon obiektu DB w Django?
survey_new = survey
survey_new.title = survey.title + ' -- Copy'
survey_new.owner = str(new_owner_id)
survey_new.created = datetime.now()
survey_new.pk = None
survey_new.save()
for sec in survey.sections.all().order_by('order'):
sec_n = sec
sec_n.survey_id = survey_new.id
sec_n.pk = None
sec_n.save()
for q in sec.questions.all().order_by('order'):
q_n = q
q_n.section_id = sec_n.id
q_n.pk = None
q_n.save()
for op in q.options.all().order_by('order'):
op_n = op
op_n.question_id = q_n.id
op_n.pk = None
op_n.save()
to jednak wydaje się działać na wszystkich pętlach bez żadnych błędów, a tylko tworzenie kopii badania. Miałem nadzieję, że skopiuje to ankietę, sekcje, pytania, opcje dla tej instancji ankiety. Po prostu nie mogę zrozumieć, co robię źle tutaj.
Kilka uwag: 1. Powinieneś przeczytać ['select_related()'] (https://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related) i sprawdzić, czy wygląda ciekawie. 2. Zachowaj ostrożność podczas kopiowania wartości id lub możesz przypadkowo nadpisać element * original * w DB. –
Dlaczego nie używasz 'Options.objects.create (...)' i 'Section.objects.create (...)' itp.? Dlaczego próbujesz wygłupiać się z PK? –
@Peter: Dzięki za wskaźnik do select_related(). To powinno zoptymalizować mój kod nieco :) – Priyeshj