我看到 Django 用户配置文件创建错误,之前已被问过几次,但其他问题的解决方案和Django 文档推荐的修复程序不起作用。
我有一个 UserProfile 模型,我在从 Django 管理页面创建新用户对象时尝试创建它。(请原谅我这里的语法,自从我使用堆栈溢出以来已经有一段时间了)
class UserProfile(models.Model):
user = models.OneToOneField(User)
organization = models.IntegerField(null=True)
phone = models.CharField(max_length=20, null=True, blank=True)
phone_ext = models.CharField(max_length=8, null=True, blank=True)
team_no = models.CharField(max_length=30, null=True, blank=True)
post_save.connect(create_user_profile, sender=User, dispatch_uid="a.unique.string.that.does.not.help.me")
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
我已将用户配置文件添加到 UserAdmin 类并取消注册/注册管理站点条目。
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'profile'
class UserAdmin(UserAdmin):
inlines = (UserProfileInline, )
actions = [set_organization]
exclude = ('is_staff',)
try:
admin.site.unregister(User)
admin.site.unregister(RegistrationProfile)
admin.site.unregister(Group)
## Re-register UserAdminadmin.site.unregister(User)
finally:
admin.site.register(User, UserAdmin)
admin.site.register(RegistrationProfile, RegistrationAdmin)
admin.site.register(Group, GroupAdmin)
因此,每次我尝试创建新用户时,我总是会收到 user_profile_user_id 字段的重复键错误。查看日志,在用户保存时运行了两个插入语句。第一个是缺少在管理界面中的用户配置文件字段中输入的所有数据。第二个拥有所有数据,但失败了,因为已经有了只有他的 user_id 的初始插入。
我已经在项目中搜索了几次,为 UserProfile 类寻找我的 models.py 的重复导入,但一无所获。
有人在这里有什么想法吗?
谢谢你。
- 更新 -
Django 版本是 1.3
imports in the profile/models.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save, pre_save
import logging
从 django.contrib 导入 admin.py 从 django.contrib.auth.models 导入组 从 test.django.registration.models 导入 RegistrationProfile 从 test.django.registration.admin 导入 RegistrationAdmin 从 django.contrib.auth.admin从 django.contrib.auth.models 导入 UserAdmin、GroupAdmin 从 test.django.extranet.profile.models 导入用户 从 test.django.common.models.ajrsonline.ajrsonline_users 导入 UserProfile 从 test.django.common.middleware.ajrs_ldap 导入 AjrsonlineUsers导入 AJRSOnlineLdapBackend