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

时间:2019-11-08 01:35:53

标签: django django-migrations

我正在编写django迁移操作,以更改“默认”数据库中的某些数据。我的应用可以访问“服务”数据库,其中包含我无法更改的数据。

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中。为此,我需要在迁移操作中访问“服务”数据库中的数据。

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模型上的外键字段“调查”不可用。

  

django.core.exceptions.FieldError:无法解析关键字“调查”   进入领域。选项包括: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)

1 个答案:

答案 0 :(得分:1)

:facepalm:

答案盯着我。切换了关联模型的导入:

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

收件人:

from services.registry.models import DataRelease, Survey

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