如何在Django中正确迁移自定义UserModel

时间:2019-06-07 07:43:31

标签: python django django-models

我有AbstractUser的自定义用户模型。在用户模型中,我有1个字段作为其他模型的foreignKey。所以我无法迁移,因为我收到错误消息:

no such table: app_userrate

我很累于评论这个foreignKey字段,但这不是解决方案,因为我想自动部署应用程序。

class UserRate(models.Model):
    name = models.CharField(max_length=30, blank=False)
    max_active_events_cnt = models.PositiveIntegerField(default = 5)
    max_people_contacts_cnt = models.PositiveIntegerField(default = 30)

    def __str__(self):
        return self.name

def default_rate():
    obj, created = UserRate.objects.get_or_create(name="Basic")
    return obj.id

class User(AbstractUser):
    rate = models.ForeignKey(UserRate, on_delete=models.PROTECT, default=default_rate)
    rate_until = models.DateField(null=True, blank=True)

我想了解应该进行哪些更改才能正确进行迁移

1 个答案:

答案 0 :(得分:3)

这实际上与用户模型无关,也与外键无关。它与默认属性有关,您已将其设置为调用一个函数,该函数本身会执行数据库查找。显然,在运行迁移时,db项目不存在。

有一个解决方案,但是将需要一些步骤。您首先需要删除默认属性,然后创建不带默认属性的迁移(您可能需要设置null = True)。然后,添加第二个迁移以定义“基本” UserRate对象。最后,重新添加默认值并创建第三个迁移。