每当我尝试通过管理面板创建用户时,我都会收到此错误。我不知道为什么。但如果我按user = User.objects.create_user('aegon', 'g@ad.com', 'hehehe123')
这样做,它就会正常工作。是什么原因引起了这个?
我的数据库中的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)
答案 0 :(得分:4)
可能是重复信号:
错误的来源实际上在UserProfile
模型中,而不是User
本身。异常消息指出user_id
(来自User
的{{1}}模型的引用)会重复,因此UserProfile
User
的此类记录已存在在表格中,或id = 3
信号被触发两次。
来自Django文档here:
在某些情况下,将接收器连接到信号的代码可以 多次运行。这可能会导致您的接收器功能 注册不止一次,因而被称为a的倍数倍 单信号事件。
解决方案是:
post_save
这将为您的信号提供唯一ID并防止它多次触发。
如果这没有帮助:
有时您必须明确设置# 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")
关系的主键:
OneToOne
这将覆盖默认的主键行为,并且不会产生异常。