【问题标题】:Django: import auth user to the modelDjango:将身份验证用户导入模型
【发布时间】:2012-10-06 23:18:52
【问题描述】:

在 Django 中我创建了一个新模型:

from django.db import models
from django.contrib.auth import user

class Workers(models.Model):
    user = models.OneToOneField(User, primary_key=True)
        work_group = models.CharField(max_length=20)
        card_num = models.IntegerField()
    def __unicode__(self):
            return self.user

但它不起作用:ImportError: cannot import name user

如何解决?

我想在 db 中创建一个新表“workers”,它与表“auth_user”有OneToOne 关系。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    AUTH_USER_MODEL 是一个很好的解决方案。这是根据问题的完整解决方案。

    from django.db import models
    from django.conf import settings
    
    class Workers(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL)
        work_group = models.CharField(max_length=20)
        card_num = models.IntegerField()
    
        def __unicode__(self):
            return self.user.id
    

    【讨论】:

      【解决方案2】:
      from django.contrib.auth.models import User
      

      您错过了模型 - 并且用户是大写的。

      如果您使用自定义用户模型,您应该使用:

      from django.contrib.auth import get_user_model
      User = get_user_model()
      

      更多详情请见docs

      在 Django 1.11 中更改:

      添加了在导入时调用 get_user_model() 的功能。

      【讨论】:

      【解决方案3】:

      为了保持代码通用,在定义模型与用户模型的关系时,使用get_user_model() 方法检索用户模型并使用AUTH_USER_MODEL 设置来引用它,而不是直接引用auth 用户模型.

      参考:Django By Example

      【讨论】:

        【解决方案4】:

        如果您使用的是自定义 User 模型,请执行以下操作来引用它:

        from django.contrib.auth import get_user_model
        User = get_user_model()
        

        或者如果在外键或多对多关系中使用它:

        from django.conf import settings
        ....
        user = models.ForeignKey(settings.AUTH_USER_MODEL)
        

        docs

        【讨论】:

        • 这比公认的答案更正确,因为它更便携。
        猜你喜欢
        • 2013-11-15
        • 2021-12-25
        • 2018-07-10
        • 2018-04-25
        • 1970-01-01
        • 2015-08-05
        • 2013-12-23
        • 1970-01-01
        • 2019-03-30
        相关资源
        最近更新 更多