Django 模型 - 保存/创建之前

ola*_*nod 3 django django-models

我有两个模型:

class Category(MPTTModel):
    name = models.CharField(max_length=50,unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')    
    def __unicode__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=50)
    categories = models.ManyToManyField(Category,related_name='products')    
    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

这些类别遵循树状结构,我只想将产品添加到“叶类别”。
当我打电话my_category.products.create(...)或类似的时候,my_category.is_leaf_node() == False它应该失败。
如果my_category.children.create(...)my_category 已经有产品,那么它应该失败。
这些检查放在保存方法中吗?在自定义管理器中?或者别的地方?我希望验证在模型级别进行。

min*_*ism 5

模型级验证的正确位置是在函数中clean()。您可以在此处提出django.core.exceptions.ValidationError来描述您的错误。查看clean() 的文档