0

在我当前的项目中,我将替换默认的django用户模型。随着模型数量的增加,我决定将实现分成几个文件夹,但现在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) 
        })) 
+0

尝试从进口。用户的UserManager改变 '从djutils.models.user进口的UserManager,User' 到 ',User' 会发生什么? –

+0

如果使用'AUTH_USER_MODEL ='djutils.models.User'',它会工作吗? – Aya

+0

@JosvicZammit一样。进口似乎工作正常。 –

回答

4

在您的用户模型Meta类设置app_label = 'djutils'

有关更多信息,请参阅app_label文档。