Вот моя модель.Как получить доступ к переменной уровня класса модели при миграции данных?
Poll(models.Model):
title = models.CharField(max_length=1024)
MY_VAR = ['my_class_level_attribute'] # I want to access this
Вот моя миграция данных:
def my_func(apps, schema_editor):
Poll = apps.get_model('my_app', 'Poll')
print Poll.MY_VAR
class Migration(migrations.Migration):
dependencies = [
('webmerge', '0012_previous_migration'),
]
operations = [
migrations.RunPython(my_func)
]
Линия print Poll.MY_VAR
выдает ошибку атрибута. Я думаю, что этот вопрос может в том, как get_model
выполняет в рамках миграции данных, поскольку следующие строки успеха в оболочке Django:
In [2]: from django.apps import apps
In [3]: Poll = apps.get_model('my_app', 'Poll')
In [4]: Poll.MY_VAR
Out[4]: ['my_class_level_attribute']
Жаль, это похоже на единственно возможное решение. У кого-нибудь есть тот, который не требует жесткого кодирования этих вещей в миграции, делая их более хрупкими? –
Ну, альтернативой является копирование данных непосредственно в миграцию, которая менее хрупкая, но менее СУХОЙ. Чтобы получить оба варианта, вам нужно изменить код, если я не ошибаюсь. Сделайте снимок вашей текущей модели, сохраните ее в каталоге моментальных снимков, содержимое которых неизменно или добавляется только и импортирует модель. Или вы можете интегрироваться с версией, записывать git shaw из текущей фиксации в процессе миграции и миграции, проверять соответствующий файл с этой фиксации ... тогда вы можете столкнуться с устаревшими зависимостями и т. Д. Это действительно непростая проблема. – DylanYoung