【问题标题】:Django unique combination is duplicateDjango唯一组合是重复的
【发布时间】:2017-07-30 07:17:20
【问题描述】:
django.db.utils.IntegrityError: (1062, "Duplicate entry 'Restauarant' for key 'restaurants_restaurant_name_address_id_e074fa2e_uniq'")

以上是错误。如餐厅模型所示,我已定义地址和名称应该是唯一的。虽然当我创建餐厅时,如果名称和地址的组合是唯一的,但它们中的任何一个与另一个餐厅对象相同,那么这将失败。例如。如果在“35 Something Else Street”存在像“Restaurant”这样的现有对象,“10 Something Street”的“Restaurant”将会失败。任何建议都会很棒,谢谢。

class Restaurant(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=128)
    street_number = models.CharField(max_length=10)
    route = models.CharField(max_length=128)
    locality = models.CharField(max_length=116)  # 2* 58 (longest place name)
    administrative_area_level_1 = models.CharField(max_length=116, default=None)  
    postal_code = models.CharField(max_length=12)
    country = CountryField()
    slug = models.SlugField(max_length=128)
    profile_image = models.ImageField(upload_to='profile_images', blank=True)
    menu = models.ManyToManyField(Menu)
    favourites = models.IntegerField(default=0, editable=False)
    is_active = models.BooleanField(default=True)

    class Meta:
        # ensures unique combination, prevents duplicate 'restaurants'
        unique_together = ((
            'name',
            'street_number',
            'route',
            'locality',
            'administrative_area_level_1',
            'postal_code',
            'country'
        ))

【问题讨论】:

  • 您的错误消息包含address 但不包含您的代码,所以我怀疑您之前设置了不同的约束并且没有正确迁移。
  • 谢谢,我找到了我犯了这个错误的地方,但我无法修复它,因为它会引发错误迁移该更改:ValueError:为restaurants_restaurant(name,address_id)找到错误的约束数(0) )
  • 请注意,python 代码在代码 sn-p 中不会得到正确的格式。请改用代码示例。

标签: python django python-3.x web django-models


【解决方案1】:

您的代码中存在可能导致错误的拼写错误。

unique_together 应该是一个元组的元组,但是你在括号内的元组后面漏掉了一个逗号。

这可能会有所帮助:

unique_together = ((
    'name',
    'street_number',
    'route',
    'locality',
    'administrative_area_level_1',
    'postal_code',
    'country'
), )

现在,当您重新运行迁移时,您可能不会收到该错误。

同样很快——假设 slug 是从名称派生的,在 slug 而不是 name 上设置唯一性可能更有意义。您不希望由于大小写的变化而使某些东西滑过唯一约束。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多