Django unique_together未能阻止重复数据
我明显没有搞明白该怎么正确地做这个,有人能帮我理清思路吗?这是我的模型:
class Team(models.Model):
teamID=models.CharField(max_length=255) #this will be generated on the iPad
name=models.CharField(max_length=255)
slug=models.SlugField(max_length=50)
teamNumber=models.CharField(max_length=30)
checkIn=models.DateTimeField(default=datetime.now())
totalScore=models.IntegerField(max_length=6)
class Meta:
unique_together = ("teamID", "name", "slug", "teamNumber", "totalScore")
如果我连续提交两次,它会把所有内容都保存下来。天哪!!!
4 个回答
8
是的,unique_together这个参数接收的是一个元组的元组。我没有测试过包含超过两个元素的元组,但应该是可以工作的。
对于你的例子:
unique_together = (("teamID", "name"), ("slug", "teamNumber"))
或者:
unique_together = (("teamID", "name", "slug", "teamNumber", "totalScore"))
27
正如aganders3提到的,这个限制是在数据库层面上执行的;不过我猜您可能在使用像SQLite这样的数据库,它不支持这种限制。
之所以在管理界面上能正常工作,是因为它自己进行了唯一性检查(并不是完全依赖数据库来提示限制违规)。
您可以换一个支持这种唯一性限制的数据库,比如MySQL或Postgres,或者您也可以考虑通过信号来添加检查:http://djangosnippets.org/snippets/1628/
14
试试正确的嵌套元组写法 ((foo,bar),)
,而不是简单的 (foo, bar)
吧?
https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together