ManyToMany的独特组合 [英] Unique Combination of ManyToMany
本文介绍了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屋!
查看全文