我在用Django '1.5c1'.我的settings.py中有这一行:

AUTH_USER_MODEL = 'fileupload.galaxyuser'

这是我的Galaxyuser型号:

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'

我想从Galaxyuser模型进行身份验证.但是,当我登录时,我会遇到以下错误:

AttributeError: 'Manager' object has no attribute 'get_by_natural_key'

我做错了什么?

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'

推荐答案

您已经创建了一个新的用户模型,但是您还没有为该模型指定经理.如果你还不熟悉Django的经理人,我建议你先读documentation on that.正如Django 1.5所说(source):

还应该为用户模型定义自定义管理器.如果您的用户模型定义的用户名和邮箱字段与Django的默认用户相同,那么您可以安装Django的UserManager;但是,如果用户模型定义了不同的字段,则需要定义一个自定义管理器,该管理器扩展BaseUserManager,并提供两个附加方法:create_user()create_superuser().

简而言之,如果您的模型使用与Django的User模型相同的用户名和邮箱字段,那么您可以写:

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'

或者,您需要子类BaseUserManager(同样在django.contrib.auth.models中)并实现所需的方法.然后,您需要将其赋给模型的objects变量.

Django相关问答推荐

Django BooleanField如何使用RadioSelect?

Django OneToOneFieldto抽象对象

Django没有';t显示黄页

从多个数据库访问 Django 会话

在 Serverless + Lambda + API Gateway HTTP API 上运行的 Django 应用程序正在重写链接以使用默认前缀

如何在 createsuperuser 中实例化表

Django 转储数据将附加数据添加到 json 导出

在 Django Admin change_list 视图中更改 list_editable 字段时保存 Django 模型

在 Django 中处理信用卡付款的最佳 Select 是什么?

django REST 框架 - 嵌套 ModelSerializer 的有限查询集?

如何在 forms.Form 子类上动态设置 models.ModelChoiceField 的查询集

如何在 django 中生成 url

Django:创建索引:非唯一,多列

使用 Gunicorn 运行 Django - 最佳实践

Django 模板和变量属性

单击弹出框会滚动回页面顶部 [Bootstrap 和 Django]

Django表单集:首先需要?

django过滤器超过几天?

Django 自定义用户邮箱帐户验证

Django 应用程序运行良好,但收到 TEMPLATE_* 警告消息