如何在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

我有一个游戏玩家的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 = 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")