Джанго, Юг и команда --freeze - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь начать с миграции данных на юг.Я нашел этот вопрос SO: Ошибка «перемещения» данных на юг при использовании South Freeze Orm и пробовал команды, перечисленные там, но это, похоже, не помогает.

У меня есть 2 приложения Aи B в моем проекте, вот их модели:

# /app_A/models.py
from django.db import models 
class Employee(models.Model): 
    name = models.CharField(max_length = 100) 
    department = models.ForeignKey("Department")
    manager = models.ForeignKey("self", blank = True, null = True)
    birthdate = models.DateField()

# /app_B/models.py
from django.db import models
from hr_manager.models import Employee
class Task(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField()
    assigned_to = models.ForeignKey(Employee, null=False, blank=False)
    seniority = models.IntegerField(default=0)
    age = models.IntegerField(default=0)

Я пытаюсь сгенерировать миграцию данных для app_B, чтобы он вычислял возраст и возраст работника, которому назначено задание, и сохранял его вСамо задание.Я запустил:

./manage.py datamigration app_B populate_age_and_senority --freeze app_A

параметр --freeze должен сделать модели app_A доступными при миграции через orm ['app_1.'].Затем я отредактировал миграцию, созданную следующим образом:

from south.db import db
from south.v2 import DataMigration
from django.db import models
class Migration(DataMigration):
def forwards(self, orm):
    import datetime
    def calculate_age(born):
        ''' Returns the age from a starting date '''
        ...
    birthdate = orm['hr_manager.Employee'].birthdate
    date_joined = orm['hr_manager.EmployeeHistory'].date_joined
    orm.Task.age = calculate_age(birthdate)
    orm.Task.seniority = calculate_age(date_joined)
    orm.Task.save()
def backwards(self, orm):
    raise RuntimeError("Cannot reverse this migration.")

И затем запустил:

./manage.py migrate app_B

Вот что я получил:

AttributeError: type object 'Employee' has no attribute 'birthdate'

Я что-то сделалне так?

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 03 июня 2011

Строка:

orm['hr_manager.Employee']

Доступ к Model, а не к экземпляру.Вам необходимо получить доступ к экземпляру с помощью обычных методов:

orm['hr_manager.Employee'].objects.all()
orm['hr_manager.Employee'].objects.get(...)
...

.

...