我正在尝试通过Django中的用户配置文件(1.2.5,Ubuntu natty中提供的版本)向用户添加一些额外的属性,但每当我通过管理控制台创建一个新用户时,只有一个包括新属性(例如,'phone'),我得到一个“列user_id不是唯一的”IntegrityError。
我看到其他人遇到了这个问题,他们似乎通过在userprofile创建信号中添加一个独特的dispatch_uid来解决它,但这对我不起作用:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
phone = models.CharField(max_length=40,blank=True,null=True)
def create_user_profile(sender, instance, **kwargs):
UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User, dispatch_uid="users-profilecreation-signal")
AUTH_PROFILE_MODULE设置为指向此类,在settings.py中。
任何人都知道我做错了什么?
答案 0 :(得分:5)
尝试创建相同的配置文件有两次尝试。一个来自信号,另一个来自内联管理表单。
这个question/answer涵盖了它,并提供了更详细的潜在解决方案。
答案 1 :(得分:0)
也许检查一下这是否是创建用户的信号。您可能会看到有多个回调的竞争条件。
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.get_or_create(user=instance)