Tôi đang ghi dữ liệu di chuyển ở miền nam để sửa một số dữ liệu không chuẩn hóa mà tôi đã sửa đổi trong mã trước đó. Cách để tìm ra giá trị đúng cho trường không chính xác là gọi một phương thức tĩnh trên lớp mô hình django. Mã này trông như thế này:Cách gọi một phương thức tĩnh trên một lớp mô hình django trong khi di chuyển về phía nam
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()
Nhưng điều này không thành công với
AttributeError: type object 'Account' has no attribute 'lookup_by_name'
Tôi đoán nam chỉ không hỗ trợ @staticmethod
s trên mô hình các lớp học?
Cố nhập tài khoản trực tiếp không thành công, trừ khi tôi cũng nhập Ghi trực tiếp và hoàn toàn bỏ qua đối tượng ORM. Đó có phải là một lựa chọn an toàn, vì đó là di chuyển dữ liệu và lược đồ không thay đổi? Hoặc tôi nên chạy bản vá này bằng tay chứ không phải trong bối cảnh di cư về phía nam.
Huh. Điểm tốt. Cảm ơn. – Leopd
thx, Nghe có vẻ như là một lý do tốt, nhưng một số lần nó thực sự rất nhiều đau đớn vì không được phép sử dụng nó. Có lẽ phải có một số cài đặt có thể thay đổi là hành vi và nhà phát triển chịu trách nhiệm giữ phương thức ở đó trong các phiên bản sau của mã, nếu anh ta/cô ấy bật nó lên. –