【发布时间】:2019-11-17 01:55:10
【问题描述】:
假设我有以下 Django 模型:
class PersonClub(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
club = models.ForeignKey(Club, on_delete=models.CASCADE)
year = models.PositiveSmallIntegerField()
class Meta:
unique_together = ("person", "club", "year")
我需要在模型级别应用一个验证器来执行此规则:
一个人在某一年只能属于 3 个不同的俱乐部。
最好的方法是什么?我想我的验证器应该看起来像这样,但我不知道把它放在哪里:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_annual_clubs_per_person(obj):
count = PersonClub.objects.filter(person=obj.person, year=obj.year).count()
if count >= 3:
raise ValidationError(
_("%(person)s has exceeded max clubs for %(year)s"),
params={"person": obj.person, "year": obj.year},
)
【问题讨论】:
标签: django django-models django-validation