Django UserProfiles中的user_id列不唯一

3 投票
2 回答
4754 浏览
提问于 2025-04-16 23:44

我正在尝试通过Django中的用户资料为用户添加一些额外的属性(我用的是1.2.5版本,这个版本在Ubuntu natty中提供)。但是每次我通过管理控制台创建新用户,并且包含了一个新属性(比如“电话”)时,就会出现“列user_id不是唯一的”的完整性错误。

我看到其他人也遇到过这个问题,他们似乎通过给用户资料创建信号添加一个唯一的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")

在settings.py中,AUTH_PROFILE_MODULE已经设置为指向这个类。

有人知道我哪里出错了吗?

2 个回答

0

也许可以检查一下,这是否是创建用户的信号。你可能遇到了一个竞争条件,也就是有多个回调函数在同时运行。

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.get_or_create(user=instance)
5

这里有两个尝试去创建相同的用户资料,一个是通过信号来创建,另一个是直接通过内联的管理员表单来创建。

这个 问题/答案 更详细地讲解了这个情况和一个可能的解决办法。

撰写回答