我正在尝试设计一个模型,该模型允许我安排活动(垒球比赛)并从更大的团队名册中创建比赛名册:
class Game(models.Model):
DateTime = models.DateTimeField()
opponent = models.CharField(max_length = 50, default="TBD")
players = models.ManyToManyField(Player, limit_choices_to={'id__in': Player.objects.filter(active='True')},blank=True)
到现在为止还挺好。但我还想为玩家的 ManyToMany 字段添加一些自定义验证,以便游戏名册符合联盟关于最小和最大名册规模等的规则。
当我调用以下 clean() 方法时,我得到一个 ValueError 返回('Game' 实例需要有一个主键值才能使用多对多关系。):
def clean(self, *args, **kwargs):
from django.core.exceptions import ValidationError
#self.save()
players_count = self.players.count()
# Don't allow rosters with fewer than 9 players
if players_count < 9:
raise ValidationError('Rosters must have at least 9 players')
如果我插入注释掉的 self.save,验证器会工作,但我最终会得到多个游戏条目。
我是新手——这是我的第一个非教程 Django 项目——所以我猜有一个相当简单的答案。我在这里和 Django 文档中四处寻找,并尝试了一些看起来很有希望的东西,但没有任何效果。