0

我看到 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

4

1 回答 1

0

使用 if 语句,以便限制第一个语句。像这样的例子:

 if instance.field_name:
     //save data here

     //In here you can save the value that has complete data
于 2013-02-25T02:56:46.417 回答