AttributeError:“Manager”对象在Django中没有属性“get_by_natural_key”错误? [英] AttributeError: 'Manager' object has no attribute 'get_by_natural_key' error in Django?
问题描述
我正在使用Django '1.5c1'
。我的settings.py中有这一行:
AUTH_USER_MODEL ='fileupload.galaxyuser'
这是我的 Galaxyuser
型号:
$ $
id = models.IntegerField(primary_key = True)
create_time = models.DateTimeField(null = True,blank =真的)
update_time = models.DateTimeField(null = True,blank = True)
email = models.CharField(max_length = 765)
password = models.CharField(max_length = 120)
external = models.IntegerField(null = True,blank = True)
deleted = models.IntegerField(null = True,blank = True)
purged = models.IntegerField(null = True,blank =
username = models.CharField(max_length = 765,blank = True)
form_values_id = models.IntegerField(null = True,blank = True)
disk_usage = models.DecimalField(null =诚然,max_digits = 16,decimal_places = 0,空=真)
类元:
db_table = U galaxy_user
我想从Galaxyuser模型进行验证。但是当我登录时,我收到这个错误:
AttributeError:'Manager'对象没有属性'get_by_natural_key'
我在做什么错了?
修改: 追溯:
追溯:
文件/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.pyin get_response
115. response = callback(request,* callback_args,** callback_kwargs)
文件/home/zurelsoft/workspace/genalytics/fileupload/backend.pyin login_backend
26. user = authenticate(username = username,password = password)
文件/ usr / local / lib / python2.6 / dist-packages / django / contrib / auth / __ init__.py在身份验证
59. user = backend.authenticate(** credentials)
文件/ usr / local / lib /python2.6/dist-packages/django/contrib/auth/backends.py验证
16. user = UserModel.objects.get_by_natural_ key(username)
异常类型:/ login_backend /
中的AttributeError异常值:'Manager'对象没有属性'get_by_natural_key'
您已经创建了一个新的用户模式,但您还没有指定的经理这一模式。如果您还不熟悉Django的管理员,我建议您先阅读该文档 。正如Django 1.5所说(来源):
您还应为用户模型定义自定义管理器。如果您的用户模型定义的用户名和电子邮件字段与Django的默认用户相同,您只需安装Django的UserManager;但是,如果您的用户模型定义了不同的字段,则需要定义一个自定义管理器,该管理器可以扩展BaseUserManager,并提供两种附加方法:
create_user()
和create_superuser ()
。
简而言之,如果您的模型使用与Django的用户
模型,那么你可以写:
from django.contrib.auth.models import UserManager
class GalaxyUser(models.Model):
id = models.IntegerField(primary_key = True)
create_time = models.DateTimeField(null = True,blank = True)
update_time = models.DateTimeField(null = True,blank = True)
email = models.CharField(max_length = 765)
密码= models.CharField(max_length = 120)
外部= models.IntegerField(null = True,blank = True)
deleted = models.IntegerField(null = True,blank = True)
purged = models.IntegerField(null = True,blank = True)
username = mod els.CharField(max_length = 765,blank = True)
form_values_id = models.IntegerField(null = True,blank = True)
disk_usage = models.DecimalField(null = True,max_digits = 16,decimal_places = 0,blank = True)
objects = UserManager()
class Meta:
db_table = u'galaxy_user'
或者,您需要将 BaseUserManager
(也在 django.contrib.auth.models
)并实现所需的方法。然后,你需要把它分配给对象
变量模型。
I am using Django '1.5c1'
. I have this line in my settings.py:
AUTH_USER_MODEL = 'fileupload.galaxyuser'
Here's my Galaxyuser
model:
class GalaxyUser(models.Model):
id = models.IntegerField(primary_key=True)
create_time = models.DateTimeField(null=True, blank=True)
update_time = models.DateTimeField(null=True, blank=True)
email = models.CharField(max_length=765)
password = models.CharField(max_length=120)
external = models.IntegerField(null=True, blank=True)
deleted = models.IntegerField(null=True, blank=True)
purged = models.IntegerField(null=True, blank=True)
username = models.CharField(max_length=765, blank=True)
form_values_id = models.IntegerField(null=True, blank=True)
disk_usage = models.DecimalField(null=True, max_digits=16, decimal_places=0, blank=True)
class Meta:
db_table = u'galaxy_user'
I want to authenticate from Galaxyuser model. However when I login I am getting this error:
AttributeError: 'Manager' object has no attribute 'get_by_natural_key'
What am I doing wrong?
Edit: Traceback:
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/zurelsoft/workspace/genalytics/fileupload/backend.py" in login_backend
26. user = authenticate(username=username, password=password)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/__init__.py" in authenticate
59. user = backend.authenticate(**credentials)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/backends.py" in authenticate
16. user = UserModel.objects.get_by_natural_key(username)
Exception Type: AttributeError at /login_backend/
Exception Value: 'Manager' object has no attribute 'get_by_natural_key'
You have created a new user model but you have not yet specified a manager for that model. If you're not yet familiar with managers in Django I suggest reading the documentation on that first. As the Django 1.5 say (source):
You should also define a custom manager for your User model. If your User model defines username and email fields the same as Django's default User, you can just install Django's UserManager; however, if your User model defines different fields, you will need to define a custom manager that extends BaseUserManager providing two additional methods:
create_user()
andcreate_superuser()
.
In short, if your model uses the same username and email fields as Django's User
model then you can write:
from django.contrib.auth.models import UserManager
class GalaxyUser(models.Model):
id = models.IntegerField(primary_key=True)
create_time = models.DateTimeField(null=True, blank=True)
update_time = models.DateTimeField(null=True, blank=True)
email = models.CharField(max_length=765)
password = models.CharField(max_length=120)
external = models.IntegerField(null=True, blank=True)
deleted = models.IntegerField(null=True, blank=True)
purged = models.IntegerField(null=True, blank=True)
username = models.CharField(max_length=765, blank=True)
form_values_id = models.IntegerField(null=True, blank=True)
disk_usage = models.DecimalField(null=True, max_digits=16, decimal_places=0, blank=True)
objects = UserManager()
class Meta:
db_table = u'galaxy_user'
Alternatively, you'll need to subclass BaseUserManager
(also in django.contrib.auth.models
) and implement the desired methods. Then, you'll need to assign it to the objects
variable for your model.
这篇关于AttributeError:“Manager”对象在Django中没有属性“get_by_natural_key”错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!