get_or_create给出了IntegrityError:密钥' PRIMARY'"的重复条目。

时间:2017-05-28 10:22:10

标签: mysql django

这让我发疯,我有以下代码:

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错误...

0 个答案:

没有答案