Sto cercando di creare una copia completa di un'istanza di sondaggio, che ha diverse sezioni, e ogni sezione ha diverse domande e infine ogni domanda ha diverse opzioni. Sto usando standard django 1.3.1, con MySQL. Devo essere in grado di creare una copia completa di tutti questi elementi, per un proprietario di un sondaggio diverso. Quello che ho attualmente nella vista è:Come posso creare un clone profondo di un oggetto DB in 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()
Tuttavia, questo sembra funzionare attraverso tutti i loop senza errori, e solo la creazione di una copia di sondaggio. Speravo che questo copiasse il sondaggio, le sezioni, le domande, le opzioni per quell'istanza del sondaggio. Proprio non riesco a capire cosa sto facendo male qui.
Un paio di osservazioni: 1. Dovresti leggere ['select_related()'] (https://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related) e vedere se sembra interessante. 2. Fai molta attenzione nel copiare i valori di id o potresti sovrascrivere involontariamente l'elemento * original * nel DB. –
Perché non stai usando 'Options.objects.create (...)' e 'Section.objects.create (...)' ecc.? Perché stai cercando di scherzare con i PK? –
@Peter: Grazie per il puntatore a select_related(). Questo dovrebbe ottimizzare un po 'il mio codice :) – Priyeshj