多对多的独特组合

Fra*_*dej 3 django django-models

我正在尝试在给定的时间为玩家创建一个独特的可用性状态。代码如下:

class Player(models.Model):
  first_name = models.CharField(max_length=200)
  last_name = models.CharField(max_length=200)

class Hour(models.Model):
  date = models.DateTimeField()
  players = models.ManyToManyField(Player, blank=True,
                                   through='Availability')

class Availability(models.Model):
  player = models.ForeignKey(Player, on_delete=models.CASCADE)
  hour = models.ForeignKey(Hour, on_delete=models.CASCADE)
  available = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我的问题是,目前可以多次添加相同的可用性 - 我想以编程方式将其限制为每个组合一个。

提前致谢!

小智 8

您可以在“throuh”表(在您的情况下为可用性表)上拥有 unique_together

class Availability(models.Model):
  player = models.ForeignKey(Player, on_delete=models.CASCADE)
  hour = models.ForeignKey(Hour, on_delete=models.CASCADE)
  available = models.BooleanField()  
  class Meta:
    unique_together = (('player','hour'),)
Run Code Online (Sandbox Code Playgroud)

然后使用 get_or_create 进行添加/修改:

 obj,created = Availability.objects.get_or_create(hour=hour,player=player)
Run Code Online (Sandbox Code Playgroud)

  • 小事,我认为有一个拼写错误,“通过”,而不是“通过” (2认同)