django - 限制外键数量

标签 django django-models

让我们以这个例子为例:

class Team (models.Model):
    name = models.CharField('Name', max_length=30)

class Round (models.Model):
    round_number = models.IntegerField('Round', editable=False) #Auto-incrementing per Team
    team = models.ForeignKey(Team)

有3轮的限制。我如何在管理员内部提出错误并通常阻止团队超过 3 轮?

最佳答案

我喜欢使用验证器的方式:

def restrict_amount(value):
    if Round.objects.filter(team_id=value).count() >= 3:
        raise ValidationError('Team already has maximal amount of rounds (3)')


class Team (models.Model):
    name = models.CharField('Name', max_length=30)


class Round (models.Model):
    round_number = models.IntegerField('Round', editable=False) #Auto-incrementing per Team
    team = models.ForeignKey(Team, validators=(restrict_amount, ))

使用验证器将使 Django 正确处理它,例如,在管理面板中显示错误。

关于django - 限制外键数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586223/

相关文章:

java - 对于 Django 下基于 matlab 的 java 程序,相同的 cmd 在 shell 中工作,但在 subprocess.Popen() 中不工作

python - 如何修复 "ImportError: No module named ..."错误

python - 使用具有外键关系的两个模型通过共享文本标签使用 QuerySet API 对 django 对象进行分组

python - 注册用户个人资料的正确方法是什么?

python - 如何子类化 Django TextChoices 以添加其他属性?

python - Django max_length 另一个模型属性

django - 从另一个 View 调用 ViewSet 方法

django - 如何使用 Django 将电子邮件发送到我的 Gmail 帐户

python - 为什么 Heroku 在 Wagtail 中强制运行 dev.py?

python-3.x - 复制多对多值