gpt4 book ai didi

django - django 1.5 中的自定义用户模型

转载 作者:行者123 更新时间:2023-12-04 17:23:30 27 4
gpt4 key购买 nike

我已经扩展了 django 1.5 用户模型,如下所示,当我将任何行插入数据库时​​遇到问题。我的models.py 文件如下所示。

class MyUserManager(BaseUserManager):

def create_user(self, email, password=None):

if not email:
raise ValueError('Users must have an email address')

user = self.model(
email=MyUserManager.normalize_email(email),
)

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

def create_superuser(self, email, password):

user = self.create_user(email,
password=password
)
user.is_admin = True
user.save(using=self._db)
return user


class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='Email address',
max_length=255,
unique=True,
db_index=True,
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)

objects = MyUserManager()

USERNAME_FIELD = 'email'

def get_full_name(self):
# The user is identified by their email address
return self.email

def __unicode__(self):
return self.email

我的 admin.py 如下所示。
class MyUserAdmin(UserAdmin):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm

# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display = ('email', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Permissions', {'fields': ('is_admin',)}),
('Important dates', {'fields': ('last_login',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2')}
),
)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ()

// Now register the new UserAdmin...
admin.site.register(MyUser, MyUserAdmin)
// ... and, since we're not using Django's builtin permissions,
// unregister the Group model from admin.
admin.site.unregister(Group)

我从 django 教程( https://docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example )中遵循了上述内容

现在我遇到的问题是每当我修改管理员中的任何内容时,我都会收到一条错误消息,如下所示。

(1452,'无法添加或更新子行:外键约束失败( csiopdjango_admin_log,CONSTRAINT user_id_refs_id_c8665aa FOREIGN KEY( user_id)REFERENCES 6671045)679144

因此,看起来 django_admin_log 表总是需要对 auth_user 模型的外键引用。但是因为我创建了一个客户用户模型,所以当我创建一个 super 用户时,用户详细信息仅存储在客户 MyUser 表中,并且没有在 auth_user 模型中创建条目,这似乎是导致问题的原因。

我如何解决这个问题?请建议。

谢谢
斯里坎特

最佳答案

这看起来很像 (PostgreSQL) 数据库错误 - 而不是 Django 错误。 “auth_user”(仍然)在您的数据库结构中的 ForeignKey 约束中被引用。您的自定义模型不应该存在这样的事情,该模型称为“MyUser”。在这种情况下,引用应该类似于“accounts_myuser”或“myappname_myuser”。

我想,您已经更新了包括旧数据库在内的现有代码。如果您不需要旧的管理日志,只需删除/删除名为“django_admin_log”的表,然后运行“python manage.py syncdb”(或从 1.7 开始的“python manage.py migrate”)让 Django 重新创建这张 table 从头开始。

但是要小心:如果您有其他引用“旧”Django 用户模型的表,您将在其他位置再次遇到同样的问题。

关于django - django 1.5 中的自定义用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731015/

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