Django 属性错误:';经理';对象没有属性';通过“自然”键获取';
我正在Python3.2.3上使用Django 1.5 当我运行Django 属性错误:';经理';对象没有属性';通过“自然”键获取';,django,django-models,Django,Django Models,我正在Python3.2.3上使用Django 1.5 当我运行python3 manage.py syncdb时,它会构建数据库表,并请求我的电子邮件(定义为唯一的,而不是用户名),然后当我输入时,我会收到此错误-- AttributeError:'Manager'对象没有属性“按自然键获取” 奇怪的是,它创建了表格,但现在,我很困惑,因为我真的不明白我该做什么。文档上说我应该创建一个,但它实际上只说了这么多。它没有给我一个线索,在哪里创建它或如何创建它。我仔细看了一遍,但这并没有帮我弄明白什
python3 manage.py syncdb
时,它会构建数据库表,并请求我的电子邮件(定义为唯一的,而不是用户名),然后当我输入时,我会收到此错误--
AttributeError:'Manager'对象没有属性“按自然键获取”
奇怪的是,它创建了表格,但现在,我很困惑,因为我真的不明白我该做什么。文档上说我应该创建一个,但它实际上只说了这么多。它没有给我一个线索,在哪里创建它或如何创建它。我仔细看了一遍,但这并没有帮我弄明白什么。这太模糊了。我一直在谷歌上搜索,试图找到一些关于我需要做什么的线索,但我只是被越来越多的问题而不是答案弄疯了。这是我的models.py文件:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
class MyUsr(AbstractBaseUser):
email = models.EmailField(unique=True,db_index=True)
fname = models.CharField(max_length=255,blank=True, null=True)
surname = models.CharField(max_length=255,blank=True, null=True)
pwd_try_count = models.PositiveSmallIntegerField(blank=True, null=True)
pwd_last_try = models.DateTimeField(blank=True, null=True)
resetid = models.CharField(max_length=100,blank=True, null=True)
last_reset = models.DateTimeField(blank=True, null=True)
activation_code = models.CharField(max_length=100,blank=True, null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['fname','activation_code']
如何编写自定义用户管理器?我是否将它作为一种方法放在MyUsr模型中?或者这就是我应该做的?我应该做些完全不同的事情吗?在这一点上我什么都不确定。我只是不明白。关于这一点的文档对我来说似乎并不清楚,留下了很多有待解释的地方。我是Django的新手,但我已经接触Python好几个月了。通过对BaseUserManager进行子分类,并在模型中将其分配给objects属性,来定义自定义管理器
from django.contrib.auth.models import AbstractUser, BaseUserManager
class MyMgr(BaseUserManager):
def create_user(...):
...
def create_superuser(...):
...
class MyUsr(AbstractBaseUser):
objects = MyMgr()
email = models.EmailField(unique=True, db_index=True)
fname = models.CharField(max_length=255, blank=True, null=True)
...
必须为
BaseUserManager
定义create\u user
和create\u superuser
方法。请参阅。谢谢!这个问题让我有一段时间很为难。无论我在哪里都找不到线索。如果你直接将UserManager
子类化,你已经实现了这些方法@考蒙斯:你的评论很有帮助!谢谢;)