Aufrufen einer statischen Methode für eine Django-Modellklasse während einer Südmigration
Ich schreibe eine Datenmigration nach Süden, um denormalisierte Daten zu reparieren, die ich in früherem Code vermasselt habe. Um den richtigen Wert für das falsche Feld zu ermitteln, müssen Sie eine statische Methode für die Django-Modellklasse aufrufen. Der Code sieht so aus:
class Account(models.Model):
name = models.CharField()
@staticmethod
def lookup_by_name(name):
# There's 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()
Aber dies schlägt fehl mit
AttributeError: type object 'Account' has no attribute 'lookup_by_name'
Ich vermute, Süden unterstützt einfach nicht@staticmethod
s auf Modellklassen?
Der Versuch, ein Konto direkt zu importieren, schlägt fehl, es sei denn, ich importiere Record direkt und ignoriere das ORM-Objekt vollständig. Ist das eine sichere Option, da es sich um eine Datenmigration handelt und sich das Schema nicht ändert? Oder sollte ich diesen Fix einfach von Hand ausführen, anstatt im Rahmen einer Südmigration.