Django:如何将主键迁移到继承自AbstractUser的类的BigIntegerField

时间:2016-06-04 07:26:26

标签: python django inheritance django-migrations dbmigrate

我有一个有很多应用程序的Django项目。每个应用程序都有一个models.py文件。

我正在使用this strategy修改项目中的所有模型,以便将其主键明确定义为id = models.BigIntegerField(primary_key=True),而不是隐式定义为id = models.IntegerField(primary_key=True)

这种策略适用于我的大多数模型。除了一个型号有问题。这是我在下面定义的Profile模型:

class Profile(CachingMixin, AbstractUser):
    full_name = models.CharField(max_length=254,null=False, blank=False,)

我将以下行添加到此模型中:

id = models.BigIntegerField(primary_key=True)

之后,我成功运行了manage.py makemigrations。将创建一个新的迁移文件。但是,当我应用此迁移时,我收到以下错误:

django.db.utils.OperationalError: (1833, "Cannot change column 'id': used in a foreign key constraint 'profiles_prof_profile_id_59a0cf98572a1aaa_fk_profiles_profile_id' of table 'myapp_db.profiles_profile_groups'")

我该如何解决这个问题?显然它与继承AbstractUser有关。由于Profile继承自AbstractUser类,因此它带有自己的行李:2个子表:profiles_profile_groupprofiles_profile_user_permissions。这两个子表中的每一个都有一列profile_id,它指向父表的主键。这两列是INT。因此,当我将父级的主键更改为BIGINT时,它会中断。这里有什么解决方案?

0 个答案:

没有答案