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
现在我可以访问迁移操作中的相关字段。希望这对以后的其他人有帮助!
我正在编写一个 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
现在我可以访问迁移操作中的相关字段。希望这对以后的其他人有帮助!