为什么我不能在django中导入用户模型?

时间:2017-03-20 18:59:17

标签: python django django-models django-users

我正在使用扩展AbstractBaseUser的自定义用户模型构建一个django Web应用程序。在我的一个模型中,我需要使用这个自定义用户模型:

from accounts.models import User

class History(models.Model):
    user = models.ForeignKey(User)
    job = models.ForeignKey(Job)

当我尝试运行python manage.py makemigrations命令时,会输出以下错误消息:

ImportError: cannot import name User

在我的settings.py中,我执行以下操作让django知道有自定义用户模型:

AUTH_USER_MODEL = "accounts.User"

我很困惑我做错了什么。当然必须有一种方法来导入我不知道的这个模型。我该如何解决这个问题?

我尝试使用get_user_model()方法,但由于模型尚未加载,因此无法在模型中使用。因此,这不是解决方案。还有其他想法吗?

提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

from django.conf import settings
class History(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    job = models.ForeignKey(Job)

有关详细信息,请参阅documentation

  

如果直接引用User(例如,通过在外键中引用它),则代码将无法在AUTH_USER_MODEL设置已更改为其他用户模型的项目中使用。

     

get_user_model()[源]

     

您应该使用django.contrib.auth.get_user_model()引用用户模型,而不是直接引用User。此方法将返回当前活动的用户模型 - 如果指定了自定义用户模型,则返回自定义用户模型,否则返回User。

     

为用户模型定义外键或多对多关系时,应使用AUTH_USER_MODEL设置指定自定义模型。例如