def save(self, commit=True): self.instance.slug = slugify(self.cleaned_data['title']) ctree = CachedCategoryTree() # get category_type from the parent parent = self.cleaned_data.get('parent') if parent: if parent == ctree.abstract_node: category_type = 'A' elif parent == ctree.concrete_node: category_type = 'C' else: category_type = parent.category_type else: category_type = 'O' self.instance.category_type = category_type # recurse the children and set their type correctly if self.instance.id: for c in ctree.children_recursive(self.instance): c.category_type = self.instance.category_type c.save() return super(CategoryAdminForm, self).save(commit=commit)