如何在Django模型中使用两个唯一的约束?
我有一个游戏玩家的Django模型如何在Django模型中使用两个唯一的约束?,django,model,constraints,Django,Model,Constraints,我有一个游戏玩家的Django模型 class Player(models.Model): name = models.CharField(max_length=50) team = models.ForeignKey('Team', on_delete=models.CASCADE, blank=True, null=True) game = models.ForeignKey('Game', on_delete=models.CASCADE) objects
class Player(models.Model):
name = models.CharField(max_length=50)
team = models.ForeignKey('Team', on_delete=models.CASCADE, blank=True, null=True)
game = models.ForeignKey('Game', on_delete=models.CASCADE)
objects = GameManager()
class Meta:
unique_together = ('name', 'game',)
我只有一个唯一的限制,那就是名字和游戏在一起是独一无二的
现在,我想通过添加注册用户来扩展我们的页面。因此,我将把它添加到模型中
user = models.ForeignKey('auth.User', on_delete=models.CASCADE, blank=True, null=True)
因此,注册用户可以通过添加名称、团队、游戏和他/她的用户来订阅游戏。但是,用户只能在游戏中添加一次帐户,这将是第二个唯一限制
unique_together = ('user', 'game',)
是否可以在Django中为模型提供两个唯一的约束?或者,在保存新条目之前,我必须在表中手动搜索吗?还是有更好的办法
谢谢是的,事实上默认情况下,
unique\u together
是一组字段集合,这些字段在一起是唯一的,因此类似于:
class Player(models.Model):
name = models.CharField(max_length=50)
team = models.ForeignKey('Team', on_delete=models.CASCADE, blank=True, null=True)
game = models.ForeignKey('Game', on_delete=models.CASCADE)
objects = GameManager()
class Meta:
unique_together = (('name', 'game',), ('user', 'game',))
这是一组元组,在考虑时必须是唯一的
在一起它在Django管理中使用,并在
数据库级(即,包括适当的唯一的语句
在创建表
语句中)
为方便起见,unique_together
可以是单个元组处理单个字段集时:
unique_together = ("driver", "restaurant")
谢谢你的回答。但是这个解决方案有一个问题:我想让链接到用户帐户成为可选的。(该字段可以为空)但是,unique together最终导致只有一个未链接的玩家可以加入。@Cometchaser:通常unique together将允许NULL
具有多个值,因此我看不出问题。请注意,blank
与表单的相关性大于与模型本身的相关性。只要说null=True
就可以允许null
值。
unique_together = ("driver", "restaurant")