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
?