Проблема написания «форвардов» для миграции данных на юге - PullRequest
1 голос
/ 13 марта 2011

Поэтому, потратив большую часть своего выходного дня, пытаясь обернуть голову вокруг миграций данных и схем на юг, я чувствую, что приближаюсь - но у меня возникли некоторые проблемы с функцией пересылки данных.

Для справки, вот моя оригинальная модель:

class Lead_Contact(models.Model):
...
general_notes = models.TextField(blank=True)
...

Я пытаюсь перейти на следующее:

class Lead_Contact(models.Model):
...
# General_notes has been removed from here...
...

class General_Note(models.Model):
#...and added as a foreign key here.    
    ...
lead_contact = models.ForeignKey('Lead_Contact', null=True, blank=True)
user = models.CharField(max_length=2, choices=USER_CHOICES)
general_date = models.DateField(blank = True, null=True)
general_time = models.TimeField(blank = True, null=True)
general_message = models.TextField(blank=True)
    ...

Я выполнил шаги для convert_to_south моего приложения, а также следовал учебному пособию № 3, чтобы добавить мою таблицу, затем создать свою миграцию данных, и затем удалить старое поле Lead_contact.general_notes во второй схеме миграция.

Проблема в написании моего фактического метода Forwards (); Я пытаюсь записать данные из старого поля general_notes в таблицу General_Note:

class Migration(DataMigration):

def forwards(self, orm):
    for doctor in orm.Lead_Contact.objects.all():
            orm.General_Note.objects.create(lead_contact=doctor.id, user = "AU", general_date = "2011-03-12", general_time = "09:00:00", general_message = doctor.general_notes)

def backwards(self, orm):
    for note in orm.General_Note.objects.all():
            new_gn = orm.Lead_Contact.objects.get(id=note.lead_contact)
            new_gn.general_notes = note.general_message
            new_gn.save()

Для справки я использую django 1.2, south 0.7 и MySql 5.0.51a.

Редактировать: Удалены биты Try / Except, и я получаю сообщение об ошибке: «ValueError: Невозможно назначить« 158L »:« General_Note.lead_contact »должен быть экземпляром« Lead_Contact ».

Разве связывание General_Note.lead_contact с Doctor.id не должно быть подходящим экземпляром Lead_Contact?

1 Ответ

1 голос
/ 18 марта 2011

Попробуйте изменить doctor.id на doctor:

orm.General_Note.objects.create(lead_contact=doctor.id,
                                user = "AU",
                                general_date = "2011-03-12",
                                general_time = "09:00:00",
                                general_message = doctor.general_notes)

Кому:

orm.General_Note.objects.create(lead_contact=doctor,
                                user = "AU",
                                general_date = "2011-03-12",
                                general_time = "09:00:00",
                                general_message = doctor.general_notes)
...