1062,"重复输入' 3'对于关键' user_id'"

时间:2016-09-11 08:17:04

标签: django

每当我尝试通过管理面板创建用户时,我都会收到此错误。我不知道为什么。但如果我按user = User.objects.create_user('aegon', 'g@ad.com', 'hehehe123')这样做,它就会正常工作。是什么原因引起了这个?

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

enter image description here

错误:

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)

1 个答案:

答案 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

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