Django ORM unique_together 不起作用

0 投票
1 回答
1151 浏览
提问于 2025-04-18 15:05

我正在使用django 1.6和postgresql。我想设置一个由名字和地址字段组成的复合唯一键。我的模型是:

class MU2(models.Model):
    name = models.CharField(max_length=200,default="",unique=True)
    addresses = models.CharField(max_length=200,default="")
    ......

class Meta:
   unique_together = ("name", "addresses")

在我的视图中:

for practice in practices:
    p =MU2(**practice)
    try:
        p.save()
    except ValidationError:
       pass

复合键没有生效,我在名字和地址字段中得到了重复的记录。

我哪里做错了呢?

1 个回答

3

你在这里至少有三件事情做错了:

  1. 你的 class Meta 语句缩进得不对——它应该和字段声明在同一层级。

  2. unique_together 需要的是一组元组,而不是一个单独的元组。

  3. 你在 'pass' 的异常处理部分让你无法获得任何有用的调试信息,如果出现问题的话。虽然这并不能解决你现在的问题,但这仍然是个错误……

另外,地址并不是一个2600个字符长的“厨房水槽”那种杂七杂八的东西(通常它是一个结构化的数据类型,包含两到三行地址、邮政编码、城市名称等——在关系模型中,它可以/应该是一个独立的表),而且很少有SQL数据库会处理2600个字符长的 varchar 字段,更别提把它用作复合索引的一部分了……

撰写回答