我有一些看起来像这样的 Django 模型(这不是我的确切代码,而是一个具有相同结构的更简单示例):
class Player(models.Model):
# Some fields here.
pass
class Team(models.Model):
players = models.ManyToManyField(Player, through='TeamPlayer')
class TeamPlayer(models.Model):
team = models.ForeignKey(Team)
player = models.ForeignKey(Player)
some_other_field = models.BooleanField()
我正在使用该through
机制,因为我的链接表上有额外的列。
我的管理类看起来像这样(请注意,我使用的是内联管理员来添加玩家):
class TeamPlayerInline(admin.TabularInline):
model = TeamPlayer
max_num = 11
extra = 11
class TeamAdmin(admin.ModelAdmin):
inlines = [TeamPlayerInline]
admin.site.register(Team, TeamAdmin)
问题:我的问题是,在我的管理员中,我想验证一个团队是否有 11 名球员。任何更少都应该导致错误。我怎样才能做到这一点?
这些是我尝试过的事情以及它们不起作用的原因:
clean
验证模型的方法中的玩家数量Team
。这不起作用,因为玩家还没有被保存,所以对于一个新对象,总是有零个玩家。验证a使用的
clean_players
方法中的数字。这个方法永远不会被调用。确实会调用其他非多对多字段的类似方法。ModelForm
TeamAdmin
验证上述
clean
方法中的数字ModelForm
。此方法被调用,但self.cleaned_data
字典中没有'players'
.
有什么想法可以实现这种类型的验证吗?我远不是 Django 专家,所以不要以为我必须做所有应该显而易见的事情。