这让我发疯,我有以下代码:
category, created = Category.objects.get_or_create(name=category_name, user=self.user)
提升django.db.utils.IntegrityError: (1062, "Duplicate entry '566' for key 'PRIMARY'")
我在stackoverflow上读到了其他类似的问题,我需要在get_or_create中添加defaults
,但问题是除了我指定的两个参数之外的所有其他参数都有默认值。另外,用以下代码替换上面的代码:
try:
test = Category.objects.get(name=category_name, user=self.user)
except Category.DoesNotExist:
test = Category(name=category_name, user=self.user)
test.save()
作品。
模型定义:
class Category(models.Model):
objects = ModelManager()
name = models.CharField(max_length=70)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True
)
description = models.TextField(default="")
hashed_id = models.CharField(max_length=16, default="")
is_shared = models.BooleanField(default=False)
到底发生了什么事? 有关信息,我使用的是mysql
更新:事实证明,在创建新实例之前,存在标记为重复 DOES NOT 的密钥。 get_or_create
使用未使用的密钥创建一个新实例,然后以某种方式找到它刚创建的密钥并抛出Duplicate entry
错误...