我正在尝试将列从Char字段迁移到运行Django 1.8.2的多对多字段。我正在进行自定义数据迁移,以正确地移动数据。当我尝试迁移时,我收到数据库错误,无法将null插入到多对多的表id列中。
我的模型,简化:
class LicenseArea(models.Model):
#appraisal_account = models.CharField(max_length=17, null=True, db_index=True)
appraisal_account = models.ManyToManyField(TaxAccount, db_table='LicAreaTaxAccount', related_name='accounts_for_license_area', related_query_name='license_area_for_account', null=True)
class TaxAccount(models.Model):
account = models.CharField(max_length=17, db_index=True)
所以我首先在RunPython块中创建TaxAccount对象,然后删除旧字段并添加新字段,如下所示:
migrations.RunPython(create_tax_account_objects),
migrations.RemoveField(
model_name='licensearea',
name='appraisal_account',
),
migrations.AddField(
model_name='licensearea',
name='appraisal_account',
field=models.ManyToManyField(related_query_name='license_area_for_account', related_name='accounts_for_license_area', db_table='licenses_LicAreaTaxAccount', to='licenses.TaxAccount'),
),
一切正常。我的问题出现在我尝试迁移数据时,将LicenseArea对象与其对应的TaxAccount对象相关联。在另一个RunPython块中,我尝试下面显示的代码(我已尝试过两个方向; acct.licensearea_set.add表示TaxAccount模型没有licensearea_set属性,而下面显示的第二个选项给出了IntegrityError(ORA-01400)我无法在ID列中插入null:
for la in LicenseArea.objects.all():
acct = TaxAccount.objects.get(account=la.appraisal_account_temp)
#acct.licensearea_set.add(la)
#la.appraisal_account.add(acct)
我该如何解决这个问题?提前谢谢。