Django自定义迁移RunPython无法访问另一个数据库中的ForeignKey字段

Django custom migration RunPython cannot access ForeignKey field in another database

我正在编写一个 Django 迁移操作来更改 'default' 数据库中的一些数据。我的应用程序可以访问 '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')

但出于某种原因,DataRelease 模型上的外键字段 'survey' 在此上下文中不可用。

django.core.exceptions.FieldError: Cannot resolve keyword 'survey' into field. Choices are: id, name

任何人都可以阐明这一点吗?我假设问题是关于在迁移操作中从辅助数据库访问数据,但是如果我 运行 在控制台中使用相同的代码,它工作正常...

服务数据库中的相关调查和数据发布模型:

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)

:脸掌:

答案就在眼前。切换了关联模型的导入:

DataRelease = apps.get_model('registry', "datarelease")
Survey = apps.get_model('registry', "survey")

至:

from services.registry.models import DataRelease, Survey

现在我可以访问迁移操作中的相关字段。希望这对以后的其他人有帮助!