Use (custom) queryset instead of model classmethods.
Why not do things the django way and move the classmethods on the models to the custom querysets (currently used for NS and MP for delete only)? I'm talking about the add_root method in particular (which could just be an override of create).
So instead of doing:
you would be doing:
or even better:
since adding an instance without tree info is the same as adding a root.
This should also make the add_root() or create() available to related managers:
will create a root of SomeTreeModel with the related instance set to some_instance, just like normal relations.