2013-02-07 53 views
0

我有一個Event表。我有兩種不同類型的與會者,員工和學生。我想要做的是讓參加者在一張特殊的表格中。將django數據移動/遷移到新表中

事件表保存:

 created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 
    name = models.CharField(max_length=200) 
    location = models.CharField(max_length=200) 
    start_date = models.DateTimeField(auto_now=False, auto_now_add=False) 
    about = models.TextField(null=True, blank=True) 

    student_attendees = models.ManyToManyField(StudentProfile, null=True, blank=True) 
    staff_attendees = models.ManyToManyField(StaffProfile, null=True, blank=True) 

與會者表將有:

 event = models.ForeignKey(Event) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    profile = generic.GenericForeignKey('content_type', 'object_id') 
    created = models.DateTimeField(auto_now_add=True) 

我怎麼會去轉移或事件的學生&人員與會者的數據遷移到它的自己的參加者表。 (我沒有使用South,並且此時想避免使用它。)。感謝您的幫助和建議。

+0

南由做正是這一點。你爲什麼想要避免它? – Rod

回答

3

您可以將數據轉儲到json中,然後手動將它們分離到不同的燈具中,然後更改表(或重新創建數據庫)並加載數據。

或只寫一個腳本來手動選擇一些領域和鹹菜它們或手工轉儲爲JSON,甚至爲CSV:

with open('students.csv', 'w') as st_file: 
    writer = csv.writer(st_file) 
    for a in Attendee.objects.filter(profile__status='student'): 
     st_file.writerow(a.event_id, a.content_type, a.object_id, a.profile, ...) 

然後做一個簡單的腳本加載數據。

with open('students.csv', 'w') as st_file: 
    reader = csv.reader(st_file) 
    for row in reader: 
     event = Event.objects.get(id=row[0]) 
     event.student_attendees.add(Student.objects.get(row[2])) 

(這意味着object_id是等同於StudentProfile表的新ID)

當然,後面將數據庫做這些之前。

其實,有一個更好的辦法:

python manage.py dumpdata app.event app.attendee --indent=4 > events.json 

然後編輯以適應新的表,然後

python manage.py loaddata events.json 
+0

聽起來很痛苦,開始思考南方或進化。 –

+0

您也可以使用dumpdata&loaddata。 –

+0

您需要再次閱讀整個問題。他基本上是問如何在一個簡單的執行dumpdata&loaddata不起作用的事實之後將單個模型分成兩個模型。 –