Я пишу операцию миграции django, чтобы изменить некоторые данные в базе данных по умолчанию. Мое приложение имеет доступ к базе данных 'services', которая содержит данные, которые я не могу изменить.
Два соответствующих поля в файле default.table:
data_sets_to_remove = models.CharField(blank=True, null=False, max_length=100, default="")
data_sets_new = ArrayField(models.IntegerField(null=True, blank=True), null=True, blank=True)
т.е. я мигрируюданные из data_sets_to_remove в новый формат и добавление в data_sets_new. Для этого мне нужно получить доступ к данным из базы данных «services» в процессе миграции.
def forwards_func(apps, schema_editor):
DataRelease = apps.get_model('registry', "datarelease")
Survey = apps.get_model('registry', "survey")
data_release_queryset = DataRelease.objects.using('services').all().values('id', 'name', 'survey')
Но по какой-то причине поле внешнего ключа «survey» в модели DataRelease в этом случае недоступно. контекст.
django.core.exceptions.FieldError: Невозможно преобразовать ключевое слово 'survey' в поле. Выбор: id, имя
Может кто-нибудь пролить свет на это? Я предполагаю, что проблема заключается в доступе к данным из вторичной базы данных в рамках операции миграции, но если я запускаю тот же код в консоли, он работает нормально ...
Соответствующие модели Survey и DataRelease в базе данных служб:
class Survey(models.Model):
name = models.CharField(blank=False, null=False, max_length=100, unique=True)
class DataRelease(models.Model):
name = models.CharField(blank=False, null=False, max_length=100)
survey = models.ForeignKey(Survey, related_name='data_releases', on_delete=models.CASCADE)