我正在嘗試創建一個調查實例的完整副本,其中有幾個部分,每個部分都有幾個問題,最後每個問題都有幾個選項。我正在使用標準的Django 1.3.1,使用MySQL。我需要爲不同的調查所有者創建所有這些元素的完整副本。我目前擁有的觀點是:如何在Django中創建一個DB對象的深層克隆?
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()
然而,這似乎是通過所有的循環沒有任何錯誤運行,並且只創建調查的副本。我希望這會複製調查實例的調查,部分,問題和選項。似乎無法弄清楚我在這裏做錯了什麼。
一些觀察:1.您應該閱讀['select_related()'](https://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related)並查看它是否看起來有趣。 2.在複製id值時要非常小心,否則可能會無意中覆蓋數據庫中的* original *項目。 – 2012-01-18 21:56:19
爲什麼不使用'Options.objects.create(...)'和'Section.objects.create(...)'等?你爲什麼試圖與PK的混帳? – 2012-01-18 21:57:38
@Peter:感謝指向select_related()的指針。這應該優化我的代碼:) – Priyeshj 2012-01-18 23:12:10