Django多对多迁移无法在id中插入null

时间:2015-10-14 18:31:48

标签: django oracle django-migrations

我正在尝试将列从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)

我该如何解决这个问题?提前谢谢。

0 个答案:

没有答案