我有一个与其自身递归相关的模型。内容如下。
class Category(models.Model):
name = models.CharField(max_length=200)
parent = models.ForeignKey(
'self', blank=True, null=True,
related_name='children', on_delete=models.CASCADE)
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
path = [self.name, ]
node = self.parent
while node is not None:
path.append(node.name)
node = node.parent
return '->'.join(path[::-1])
我要实现的一点验证是防止超过3个孩子成为父类别。 例如,如果我在上面创建为状态,则将其保存如下:
Programming->Back-end->Python->ifelse.
我的问题:如何防止父类别的孩子超过3个?
答案 0 :(得分:1)
您可以尝试model validation
from django.core.exceptions import ValidationError
class Category(models.Model):
name = models.CharField(max_length=200)
parent = models.ForeignKey(
'self', blank=True, null=True,
related_name='children', on_delete=models.CASCADE)
def clean(self):
if self.parent:
if self.get_parents_length(self) > 3:
raise ValidationError("Parent has already got 3 children!")
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
path = [self.name, ]
node = self.parent
while node is not None:
path.append(node.name)
node = node.parent
return '->'.join(path[::-1])
@staticmethod
def get_parents_length(cat):
parents = [cat.name]
node = cat.parent
while node is not None:
parents.append(node.name)
node = node.parent
return len(parents)