【问题标题】:Django user model in submodel子模型中的 Django 用户模型
【发布时间】:2013-05-28 22:06:00
【问题描述】:

在我当前的项目中,我正在替换默认的 django 用户模型。随着模型数量开始增长,我决定将实现拆分为几个文件夹,但现在 django 找不到我的用户模型。

我有这个,它有效:

djutils
    models.py
        UserManager
        User

我改成这个了,不行了

djutils
    models
        __init__.py
            from djutils.models.user import UserManager, User
        user.py
            UserManager
            User

不应该还是导入模型吗?我明白了:

CommandError: One or more models did not validate:
auth.user: Model has been swapped out for 'djutils.User' which has not been installed or is abstract.

我的 settings.py 中有这个

AUTH_USER_MODEL = 'djutils.User'

(注意第一个案例有效)

请指教! 问候

编辑

djutils
    models
        __init__.py
            from __future__ import absolute_import

            from djutils.models.base import Manager, PrivateModel, Model
            from djutils.models.user import UserManager, User
            from djutils.models.passwordrecovery import PasswordRecoveryManager, PasswordRecovery

        user.py
            from djutils.models.base import Manager, Model
            from djutils import mail
            from djutils import settings
            from django.contrib.auth.models import PermissionsMixin, AbstractBaseUser, BaseUserManager
            from django.utils.translation import ugettext_lazy as _
            from django.utils import timezone
            from djutils import fields

            class UserManager(Manager, BaseUserManager):
                def create_user_instance(self, email, password, first_name, last_name, **extra_fields):
                    return user

                def create_user(self, email, password, first_name, last_name, **extra_fields):
                    return user

                def create_superuser(self, email, password, first_name, last_name, **extra_fields):
                    return user

            class User(Model(20), AbstractBaseUser, PermissionsMixin):
                # Basico info
                first_name = fields.NameField(max_length=20, help_text=_('First name'))
                last_name = fields.NameField(max_length=20, help_text=_('Last name'))
                email = fields.EmailField(max_length=255, unique=True, help_text=_('Email'))

                url = fields.URLField(help_text=_('Personal homepage'))
                bio = fields.TextField(help_text=_('Biographic details'))
                #picture = fields.ImageField(help_text=_('Profile picture'))

                # Permissions
                is_active = fields.BooleanField(default=False, help_text=_('Active user'))
                is_staff = fields.BooleanField(default=False, help_text=_('Staff member'))

                # Logging
                date_joined = fields.DateTimeField(default=timezone.now)

                # A string describing the name of the field on the User model that is used as the unique identifier
                USERNAME_FIELD = 'email'

                # A list of the field names that must be provided when creating a user via the createsuperuser management command
                REQUIRED_FIELDS = ['first_name', 'last_name', 'password']

                # Fields that are not returned by get_public
                PRIVATE = ['is_active', 'is_superuser', 'is_staff', 'last_login', 'groups', 'user_permissions', 'password', 'id']

                # Model manager
                objects = UserManager()

                class Meta:
                    swappable = 'AUTH_USER_MODEL'
                    permissions = ()

                def send_mail(self, request, subject, body, context={}):
                    mail.send_mail(request, subject, body, [self.email], context)

                def send_confirmation_email(self, request, context={}):
                    self.send_mail(request, settings.CONFIRMATION_SUBJECT, settings.CONFIRMATION_TEMPLATE, dict(context, **{
                        'redirect': request.build_absolute_uri(settings.CONFIRMATION_REDIRECT_URL)
                    }))

【问题讨论】:

  • 尝试将from djutils.models.user import UserManager, User 更改为from .user import UserManager, User 会发生什么?
  • 使用AUTH_USER_MODEL = 'djutils.models.User'是否有效?
  • @JosvicZammit 一样。导入似乎工作正常。
  • @Aya 在 django 中无效。 AUTH_USER_MODEL 的格式必须为“myapp.MyUser”。如果我这样做,我会得到“auth.user: AUTH_USER_MODEL is not of the form 'app_label.app_name'”
  • 当你移动models.py时,你是否留下了一个models.pyc,正在被拾取?

标签: python django django-models python-3.x django-authentication


【解决方案1】:

在您的 User 模型的 Meta 类中设置 app_label = 'djutils'

有关详细信息,请参阅 app_label 文档。

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2012-01-03
    • 2014-03-04
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多