java判断配置文件有重复值_创建用户配置文件的post_save用户信号被调用两次,导致重复键值违反唯一约束,仅在管理控制台中...

我有一个名为UserProfile的模型,它存储有关django用户的其他数据 .

这个模型有一个OneToOneField到django.contrib.auth.models.User

我还在User的初始插入时触发的User对象上有一个post保存信号,该用户创建一个链接到该User的UserProfile对象:

def create_user_profile(sender, instance, created, **kwargs):

if created:

UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

用户对象可以通过网站前端创建,保存后创建UserProfile . 一切正常 .

我还有一个admin.py文件,允许通过管理控制台创建User和UserProfile对象:

from django.contrib import admin

from django.contrib.auth.models import User

from django.contrib.auth.admin import UserAdmin

from myproject.apps.users.models import UserProfile

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):

model = UserProfile

filter_horizontal = ['companies']

exclude = [

'field_1', field_n'

]

class UserProfileAdmin(UserAdmin):

inlines = [UserProfileInline]

admin.site.register(User, UserProfileAdmin)

通过管理控制台创建新用户时,UserProfile表单将显示在“用户”表单下方 . 如果我将所有UserProfile字段保留为默认值(即不在表单字段中输入任何数据或更改任何默认值),则使用UserProfile成功创建用户 . 但是,如果我尝试添加任何值或更新UserProfile表单中的任何默认值,则会出现错误:

IntegrityError at /admin/auth/user/add/

duplicate key value violates unique constraint "users_userprofile_user_id_key"

DETAIL: Key (user_id)=(6323) already exists.

这表示User对象上的post_save信号已被调用两次,两次将已传递到信号中的已创建标志设置为True,导致尝试使用相同的用户ID插入两次UserProfile对象 . Django最终回滚事务,并且没有插入User或UserProfile对象 .

如果我完全删除了post_save信号,那么在管理控制台中一切正常,并且django似乎神奇地为我创建了UserProfile对象,甚至没有(显然)了解它 . 显然,这会打破前端,因为它依赖于这个post_save信号来创建UserProfile对象 .

我正在使用PostgreSQL运行Django 1.6 .

任何关于这种情况的消息都将受到极大的赞赏 . 否则,我认为必须考虑另一种如何在管理控制台中管理UserProfile的方法 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值