Django ORM unique_together 不起作用
我正在使用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
你在这里至少有三件事情做错了:
你的
class Meta
语句缩进得不对——它应该和字段声明在同一层级。unique_together
需要的是一组元组,而不是一个单独的元组。你在 'pass' 的异常处理部分让你无法获得任何有用的调试信息,如果出现问题的话。虽然这并不能解决你现在的问题,但这仍然是个错误……
另外,地址并不是一个2600个字符长的“厨房水槽”那种杂七杂八的东西(通常它是一个结构化的数据类型,包含两到三行地址、邮政编码、城市名称等——在关系模型中,它可以/应该是一个独立的表),而且很少有SQL数据库会处理2600个字符长的 varchar
字段,更别提把它用作复合索引的一部分了……