我的 django 模型有问题..
我有2个模型(表)玩家和游戏作为多对多关系,第三个模型作为它们之间的中间表,其中玩家用户名作为外键(用户名是玩家的表pk)和game_id fk ,还有一个附加属性分数,问题是超过2个玩家可以玩同一个游戏,这不是我想要的,我想要的是每个游戏都可以精确地并且只能由两个玩家玩。
如何使用 django 实现这一点?
这是型号:
class Player(models.Model):
username = models.CharField(max_length=20, primary_key=True)
fname = models.CharField(max_length=20, blank=False)
lname = models.CharField(max_length=20, blank=False)
avatar = models.ImageField(upload_to='./app/avatars/', blank=True, null=True)
is_online = models.BooleanField(default=False)
game_theme = models.ImageField(upload_to='./app/themes/', blank=True, null=True)
played_games_num = models.IntegerField(default=0)
def __str__(self):
return self.username
class Game(models.Model):
mode_choices = {
'classic': 'Classic',
'vs_robot': 'Vs Robot'
}
difficulty_choices = {
-1: 'Vs Player',
1: 'Easy',
2: 'Medium',
3: 'Hard'
}
game_id = models.AutoField(primary_key=True)
mode = models.CharField(max_length=10, choices=mode_choices)
difficulty = models.IntegerField(choices=difficulty_choices)
game_date_time = models.DateTimeField(auto_now_add=True)
duration = models.IntegerField()
players = models.ManyToManyField(Player, through='Player_game')
def __str__(self):
return str(self.game_id)
class Player_game(models.Model):
username = models.ForeignKey(Player, on_delete=models.CASCADE)
game = models.ForeignKey(Game, on_delete=models.CASCADE)
score = models.IntegerField()
class Meta:
unique_together = ['username', 'game']
def __str__(self):
return str(self.game_id)
询问我任何其他信息。
我尝试在 Meta 类中添加 unique_together,但这并没有解决问题
修改Player_game模型,对游戏字段有唯一的约束,确保每个游戏只能有两个玩家与之关联。 实现自定义验证方法或重写保存方法以通过编程方式强制执行约束。