gpt4 book ai didi

自定义 UserModel 中 id 的 Django 问题

转载 作者:行者123 更新时间:2023-12-04 04:54:21 25 4
gpt4 key购买 nike

我需要在我的自定义用户模型中使用 user_id 而不是 id(不要问为什么,这是一个很长的故事:))。
我尝试使用 django 示例中的代码,但是当我尝试登录管理后端时,我得到了
在模板 site-packages/django/contrib/admin/templates/admin/index.html 中,第 60 行出错
“用户”对象没有属性“id”

有错误的行看起来像

{% get_admin_log 10 as admin_log for_user user %}


#UserManager
class UserManager(BaseUserManager):
def create_user(self, login_name, email, first_name, last_name, password=None):
if not email:
raise ValueError('The given email must be set')
email = UserManager.normalize_email(email)
user = self.model(login_name=login_name, email=email,
first_name=first_name,
last_name=last_name,
is_staff=False, is_active=True, is_superuser=True)

user.set_password(password)
user.save(using=self._db)
return user

def create_superuser(self, login_name, email, first_name, last_name, password):
u = self.create_user(login_name, email, first_name, last_name, password)
u.is_staff = True
u.is_active = True
u.is_superuser = True
u.save(using=self._db)
return u

#Model
class User(AbstractBaseUser, PermissionsMixin):
user_id = models.AutoField(primary_key=True)
login_name = models.CharField(max_length=30, unique=True, db_index=True)
email = models.EmailField(max_length=255, unique=True)
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
phone = models.CharField(max_length=128)

objects = UserManager()
USERNAME_FIELD = 'login_name'
REQUIRED_FIELDS = ['email', 'first_name', 'last_name']

is_staff = models.BooleanField('staff status', default=False)
is_active = models.BooleanField('active', default=True)

def get_full_name(self):
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()

def get_short_name(self):
return self.first_name

#Admin
from django.contrib import admin
from applications.users.models import User


class UserAdmin(admin.ModelAdmin):
list_display = ('login_name', 'email', 'first_name', 'last_name')


admin.site.register(User, UserAdmin)

我该如何解决?

最佳答案

我也有这个问题。看起来这是 Django 中的一个错误。感谢 @karthikr 将我指向源代码(使用源 luke!),但看起来 Django 1.5 的管理员对“id”字段进行了硬编码使用,如果您已经自定义您的用户模型。

这是他们修复它的提交:

https://github.com/django/django/commit/054ce2aa02c88221ffa5665a4b9a5739cbbd0a39

看起来修复程序仅在 1.6 版中可用,所以我想解决方案是升级!

关于自定义 UserModel 中 id 的 Django 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com