ManyToMany的独特组合 [英] Unique Combination of ManyToMany

查看:47
本文介绍了ManyToMany的独特组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在给定的时间为播放器创建唯一的可用性状态。代码如下:

I'm trying to create a unique Availability status for Player on given Hour. Here goes the code:

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

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

My problem is that it's currently possible to add same Availability few times - I want to programatically limit it to just one per combination.

谢谢!

推荐答案

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

You can have the unique_together on the "throuh" table (in your case the Avaliability Table)

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'),)

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

And then use the get_or_create for adding/modifying:

 obj,created = Availability.objects.get_or_create(hour=hour,player=player)

这篇关于ManyToMany的独特组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆