いくつかのセクションを持つ調査インスタンスの完全なコピーを作成しようとしています。各セクションにいくつかの質問があり、最終的にそれぞれの質問にはいくつかのオプションがあります。私は標準の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()
しかし、これはエラーなしですべてのループを介して実行するようで、ちょうど調査のコピーを作成します。私はこれが調査、セクション、質問、その調査インスタンスのオプションをコピーすることを望んでいました。私がここで間違っていることを理解できないように見えるだけです。 survey
コード
survey_new = survey
のこの行にsurvey_new
に割り当てられているため
いくつかの観察:1.あなたは['select_related()'](https://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related)を読んで、興味深いね。 2. id値のコピーに注意してください。または、意図せずDBの*元の項目を上書きすることがあります。 –
なぜ 'Options.objects.create(...)'や 'Section.objects.create(...)'などを使っていないのですか?どうしてあなたはPKのことをばかにするのですか? –
@Peter:select_related()へのポインタありがとう。それは私のコードを少し最適化する必要があります:) – Priyeshj