3

私は2つのモデルを持っています:

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

カテゴリは構造のようなツリーに従っており、「リーフ カテゴリ」にのみ製品を追加したいと考えています。
私が電話my_category.products.create(...)などをすると、my_category.is_leaf_node() == False失敗するはずです。my_category に既に製品がある場合も同様で、失敗するはずです
。 これらのチェックは save メソッドで行われますか? カスタムマネージャーで?または他のどこか?検証はモデルレベルで行いたいと思います。my_category.children.create(...)

4

1 に答える 1

5

モデルレベルの検証の適切な場所は、clean()関数内にあります。django.core.exceptions.ValidationErrorここでエラーを説明できます。clean()のドキュメントをご覧ください

于 2013-03-23T00:17:42.967 に答える