Я пишу миграцию данных на юг, чтобы исправить некоторые денормализованные данные, которые я испортил в более раннем коде. Способ определения правильного значения для неправильного поля - вызов статического метода в классе модели django. Код выглядит следующим образом:
class Account(models.Model):
name = models.CharField()
@staticmethod
def lookup_by_name(name):
# There actually more to it than this
return Account.objects.get(name=name)
class Record(models.Model):
account_name = models.CharField()
acct = models.ForeignKey('Account')
...
class Migration(DataMigration):
def forwards(self, orm):
# Fixing Records with the wrong FK to Account
for record in orm.Record.objects.all():
record.acct = orm.Account.lookup_by_name(record.account_name)
record.save()
Но это не удается с помощью
AttributeError: type object 'Account' has no attribute 'lookup_by_name'
Я предполагаю, что юг просто не поддерживает @staticmethod
в классах моделей?
Попытка импортировать учетную запись напрямую не удалась, если я также не импортирую запись напрямую и полностью игнорирую объект ORM. Это безопасный вариант, поскольку миграция данных и схема не меняются? Или я должен просто запустить это исправление вручную, а не в контексте миграции на юг.