- Notifications
You must be signed in to change notification settings - Fork 41
Description
I'm trying to modify a project to use django-polymorphic-tree.
The project has 4 models (called A, B, C, D) all derived from a base model (called Component). Each A instance contains a set of B items (via FK), and each of those B items contains a set of C items (via FK), each of those C items contains a set of D items. There is another model called T, which as a FK to Component. Each of A, B, C, D items can have a set of T items.
First, it seems the docs/examples are a little out of date (as I get errors with django 3.1.4).
TypeError: __init__() missing 1 required positional argument: 'on_delete' I added on_delete=models.SET_NULL to the PolymorphicTreeForeignKey(...) statement in the PolymorphicMPTTModel subclass to solve this. Is this correct?
My project was using django-polymorphic and I have changed the base class (called Component) as follows.
# class Component(PolymorphicModel): class Component(PolymorphicMPTTModel): parent = PolymorphicTreeForeignKey('self', blank=True, null=True, related_name='children', verbose_name='parent', on_delete=models.SET_NULL) class Meta(PolymorphicMPTTModel.Meta): verbose_name = "Tree node" verbose_name_plural = "Tree nodes"Is that correct?
When I try to makemigrations I get errors about mptt fields (level, lft, ...) not having defaults.
How do I handle these?*
$ rm db.sqlite3 $ ./manage.py makemigrations You are trying to add a non-nullable field 'level' to component without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 2) Quit, and let me add a default in models.py NOTE: using Django 3.1.4 with Python 3.7.3 on Debian Buster (10.7) operating system.
Thanks for any help - Brendan.