gpt4 book ai didi

python - Django 1.9 无法修改 unique_together (ValueError) 错误的约束数

转载 作者:太空狗 更新时间:2023-10-30 00:06:19 25 4
gpt4 key购买 nike

我使用 inspectdb 创建了我的模型,当 django 生成以下内容时让我感到奇怪,因为只有一个这样的索引,但我顺其自然

unique_together = (('p_id', 'v_id', 'sku',), ('p_id', 'v_id', 'sku',))

现在我正在尝试将“sku2”添加到此索引,但“迁移”失败并显示以下内容:

 File "/home/user/.pyenv/versions/2.7.11/envs/master2/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 347, in _delete_composed_index
", ".join(columns),
ValueError: Found wrong number (2) of constraints for vendor_products(p_id, v_id, sku)

这是我的模型:

class Products(models.Model):
p_id = models.OneToOneField(MasterProducts, models.DO_NOTHING, db_column='p_id', primary_key=True)
v_id = models.ForeignKey('Sellers', models.DO_NOTHING, db_column='v_id')
sku = models.TextField()
sku2 = models.TextField(blank=True, null=True)

class Meta:
managed = True
db_table = 'products'
unique_together = (('p_id', 'v_id', 'sku',), ('p_id', 'v_id', 'sku',))

我尝试将 unique_together 更改为(('p_id', 'v_id', 'sku',),) 和 ('p_id', 'v_id', 'sku',)结果相同。

我还尝试使用数据库手动删除唯一索引并使用 django 重新创建它,但它仍然不允许我添加 sku2。

为什么会这样,我该如何解决?

最佳答案

我没有深入挖掘,但检查了一些我的 Django 1.8 的源代码。我认为这段代码部分是一样的。

我的猜测是您使用此语句创建了错误的约束:

unique_together = (('p_id', 'v_id', 'sku',), ('p_id', 'v_id', 'sku',))

您已经创建并应用了迁移。它在数据库中创建了两个相同的约束。从技术上讲这是允许的,但没有任何意义。

之后您尝试更改它,由于 Django 在 django.db.backends.base.schema._delete_composed_index() 中的验证,您在这里得到了错误 - 它从数据库中收集所有约束并验证只有一个:

def _delete_composed_index(self, model, fields, constraint_kwargs, sql):
columns = [model._meta.get_field(field).column for field in fields]
constraint_names = self._constraint_names(model, columns, **constraint_kwargs)
if len(constraint_names) != 1:
raise ValueError("Found wrong number (%s) of constraints for %s(%s)" % (
len(constraint_names),
model._meta.db_table,
", ".join(columns),
))

它必须从同一模块的 alter_unique_together 函数调用。

那么,你现在应该做什么?

  • 打开您的数据库并手动删除重复约束。
  • 不要对约束使用相同的键。

关于python - Django 1.9 无法修改 unique_together (ValueError) 错误的约束数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com