Tôi đang cố gắng tạo một bản sao hoàn chỉnh của một bản khảo sát có một số phần và mỗi phần có một số câu hỏi và cuối cùng mỗi câu hỏi có một số tùy chọn. Tôi đang sử dụng tiêu chuẩn django 1.3.1, với MySQL. Tôi cần có thể tạo bản sao hoàn chỉnh của tất cả các yếu tố này, cho một chủ sở hữu khảo sát khác. Những gì tôi hiện có trong chế độ xem là:Làm cách nào để tạo bản sao sâu của đối tượng DB trong 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()
Tuy nhiên, điều này dường như chạy qua tất cả các vòng mà không có bất kỳ lỗi nào và chỉ tạo bản sao khảo sát. Tôi đã hy vọng rằng điều này sẽ sao chép bản khảo sát, các phần, câu hỏi, các tùy chọn cho trường hợp khảo sát đó. Có vẻ như không thể tìm ra những gì tôi đang làm sai ở đây.
Một vài quan sát: 1. Bạn nên đọc ['select_related()'] (https://docs.djangoproject.com/en/1.3/ref/models/querysets/#select-related) và xem liệu nó có trông có vẻ thú vị. 2. Hãy cẩn thận khi sao chép các giá trị id hoặc bạn có thể vô ý ghi đè mục * ban đầu * trong DB. –
Tại sao bạn không sử dụng 'Options.objects.create (...)' và 'Section.objects.create (...)' vv? Tại sao bạn đang cố gắng để đánh lừa xung quanh với PK? –
@Peter: Cảm ơn con trỏ tới select_related(). Điều đó nên tối ưu hóa mã của tôi một chút :) – Priyeshj