我正在django建立一个网站,允许玩家与其他玩家匹配。我有以下型号:
class Session(models.Model):
# id = AutoField(primary_key=True) added automatically.
sport = models.ForeignKey('Sport', unique=False, blank=False, null=False, on_delete=models.CASCADE, )
hostplayer = models.ForeignKey('Member', unique=False, blank=False, null=False, on_delete=models.CASCADE, related_name='member_host', )
guestplayer = models.ForeignKey('Member', unique=False, blank=True, null=True, on_delete=models.CASCADE, related_name='member_guest', )
date = models.DateField(blank=False, null=False, )
time = models.TimeField(blank=False, null=False, )
city = models.ForeignKey('City', unique=False, blank=False, null=False, on_delete=models.CASCADE, )
location = models.CharField(max_length=64, unique=False, blank=False, null=False, )
price = models.FloatField(unique=False, blank=False, null=False, default=0, )
details = models.TextField(unique=False, blank=True, null=False, )
def __unicode__(self):
return unicode(self.id)
如您所见,hostplayer和guestplayer都是Member表的外键。
问题在于,当我进入django admin时,如果我选择主机播放器为jack
,我也可以选择访客播放器为jack
。这显然是错误的,因为玩家无法对抗自己。
如何将guestplayer
的选项限制为不包含hostplayer
?
此外,在模型级别,是否有一种方法可以指定一个属性的值必须与同一元组中另一个属性的值不同?一种显而易见的方法是使用形成并验证它们,但我很好奇是否存在更简单的替代方案。