Django unique_一起不防止重复

2024-04-28 16:42:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我显然不明白如何正确地做这件事,有人能让我明白。模型如下:

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")

如果我连续提交两次,它将保存所有内容。哎呀!!!


Tags: name模型modelmodelsthislengthwillmax
3条回答

是的,paremeter unique_一起作为输入接收一个元组的元组,我没有测试超过两个元素的元组,但是它应该可以工作

例如:

unique_together = (("teamID", "name"), ("slug", "teamNumber"))

或:

unique_together = (("teamID", "name", "slug", "teamNumber", "totalScore"))

尝试正确的嵌套元组语法((foo,bar),),而不仅仅是(foo, bar)

https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together

正如aganders3所提到的那样,约束是在数据库级别执行的;我假设您使用的是一个像SQLite这样的数据库,它不支持这种约束。

所有这些都能通过管理员按预期工作的原因是,它正在执行唯一性检查本身(它并不严格依赖于数据库来发出违反约束的信号)。

您可以切换到支持这种唯一性约束的数据库引擎(MySQL或Postgres都可以工作),也可以考虑使用信号添加签入:http://djangosnippets.org/snippets/1628/

相关问题 更多 >