我有一个有很多应用程序的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_group
和profiles_profile_user_permissions
。这两个子表中的每一个都有一列profile_id
,它指向父表的主键。这两列是INT。因此,当我将父级的主键更改为BIGINT时,它会中断。这里有什么解决方案?