2013-06-20 62 views
0

使用Django 1.5,尝试自定义用户功能。Django不为我的自定义用户模型创建表格

我只有3个模型在项目中。在这里,他们是,

class CustomUser(AbstractBaseUser, PermissionsMixin): 
class CustomUserManager(BaseUserManager): 
class testModel (models.Model): 

当我做python manage.py validate没有错误。当我做python manage.py sqlall lancer(蓝瑟是应用程序的名称),它显示了以下

BEGIN; 
CREATE TABLE "lancer_testmodel" (
    "id" serial NOT NULL PRIMARY KEY, 
    "first_name" varchar(30) NOT NULL, 
    "last_name" varchar(30) NOT NULL 
) 
; 

COMMIT; 

发生了什么事的SQL代码为其他两个型号?它是否仅为明确继承models.Model的模型创建表?

更多信息,

  1. 我每Django文档
  2. 我settings.py中注释掉所有其他安装的应用程序我 settings.py文件的末尾添加AUTH_USER_MODEL = 'lancer.CustomUser'。我知道 他们中的很多人被contrib.auth使用,但由于我使用的是新的自定义用户模型 ,我只是评论了其他所有内容。

这是它看起来像现在,

INSTALLED_APPS = (
    #'django.contrib.auth', 
    #'django.contrib.contenttypes', 
    #'django.contrib.sessions', 
    #'django.contrib.sites', 
    #'django.contrib.messages', 
    #'django.contrib.staticfiles', 
    # Uncomment the next line to enable the admin: 
    # 'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
    'lancer', 
) 
+0

它添加到您的设置变量'AUTH_USER_MODEL'? –

+0

@VictorCastilloTorres是的。我在settings.py文件的末尾添加了AUTH_USER_MODEL ='lancer.CustomUser'。 – reedvoid

+0

我想你已经在你的'INSTALLED_APPS'类似'myapp_where_my_model_is' –

回答

4

PermissionsMixin依赖的

'django.contrib.auth', 
'django.contrib.contenttypes', 

,如果你对此有何评论仅django.contrib.auth并取消django.contrib.contenttypes, 你会有这个错误

CommandError: One or more models did not validate: users.myuser: 'groups' has an m2m relation with model <class 'django.contrib.auth.models.Group'> , which has either not been installed or is abstract. users.myuser: 'user_permissions' has an m2m relation with model <class 'django.contrib.auth.models.Permission'> , which has either not been installed or is abstract.

如果您取消注释django.contrib.auth和评论django.contrib.contenttypes

你也会有这种错误

CommandError: One or more models did not validate: auth.permission: 'content_type' has a relation with model < class 'django.contrib.contenttypes.models.ContentType'> , which has either not been installed or is abstract.

,如果你取消注释两个sqlall具有生成你的表:d

+0

谢谢。实际上,我发现我的代码出现了1个更重要的错误(我应该完整地发布它,但是这么长时间......)。由于我从Django现有的contrib.auth.Abs​​tractUser复制了大部分代码,我也复制了这段代码:'class Meta: verbose_name = _('user') verbose_name_plural = _('users') abstract = True ',这显然告诉Django这不是一个真正的模型或什么,因为它有这个“抽象=真”的东西。删除后,和你建议的变化,它的工作!谢谢!! – reedvoid

+0

不客气的人:D –

+1

Yeah man抽象意思是这个模型不会被用来创建任何数据库表格,正如文档所述(https://docs.djangoproject.com/en/dev/topics/db/models /#abstract-base-classes) –

相关问题