Django 1062年;重复输入';3';对于键';用户id'&引用;

Django 1062年;重复输入';3';对于键';用户id'&引用;,django,Django,每当我试图通过管理面板创建一个用户时,就会出现这个错误。我不知道为什么。但是如果我通过user=user.objects.create\u user('aegon','g@ad.com“,”嘿嘿123“它会很好用的。有什么线索可以说明是什么原因造成的吗 我的数据库中的auth_user中只有一个用户 错误: django.db.utils.IntegrityError: (1062, "Duplicate entry '3' for key 'user_id'") 我的模型: class t

每当我试图通过管理面板创建一个用户时,就会出现这个错误。我不知道为什么。但是如果我通过
user=user.objects.create\u user('aegon','g@ad.com“,”嘿嘿123“
它会很好用的。有什么线索可以说明是什么原因造成的吗

我的数据库中的auth_user中只有一个用户

错误:

django.db.utils.IntegrityError: (1062, "Duplicate entry '3' for key 'user_id'")
我的模型:

class transaction(models.Model):
    amount = models.IntegerField()
    holding = models.ForeignKey(holding, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return "amount: " + str(self.amount) + " - ip : " + str(self.holding.name) + " - user: " + str(self.user.username)

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ip = models.IntegerField(default=0)
    ingameName = models.CharField(max_length=50, default='NotSet')      
    userprofit = models.IntegerField(default=0)

    user_transactions = models.ForeignKey(transaction, on_delete=models.CASCADE, blank=True, null=True)

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

post_save.connect(create_user_profile, sender=User)

可能是重复信号:

错误的来源实际上是
UserProfile
模型,而不是
User
本身。异常消息指出,
user\u id
(它是对
UserProfile
中的
user
模型的引用)被复制,因此表中已经存在
user
id=3
记录,或者触发了两次
post\u save
信号

从Django文档:

在某些情况下,连接接收器和信号的代码可能会 运行多次。这可能会导致接收器功能失效 多次注册,因此称为 单信号事件

解决办法是:

# Change 'name_your signal' to desired unique signal name within your app
post_save.connect(create_user_profile, sender=User, dispatch_uid="name_your signal")
这将为您的信号提供唯一的id,并防止其多次发射

如果没有帮助:

有时您必须为
OneToOne
关系显式设置主键:

user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

这将覆盖默认的主键行为,并且不会产生异常。

原因可能与post_保存信号代码有关。您是否可以对其进行注释并检查-错误是否消失?信号
dispatch\u uid
primary\u key=True