Django: 3.0.6
GitHub: https://github.com/Kifsif/pcask
/category/models.py
class Category(CommentMixin,
TitleMixin,
SlugMixin,
models.Model):
pass
from category.models import Category
/post/models.py
class Post(TitleMixin,
SlugMixin,
DescriptionMixin,
models.Model):
...
category = models.ForeignKey(Category,
on_delete=models.PROTECT,
related_name='blog_posts')
The database has been dropped and recreated. All migrations have been deleted. In settings.py 'post' and 'category' are added.
When making migrations:
(venv) michael@michael:~/PycharmProjects/pcask/pcask$ python manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", line 168, in handle
migration_name=self.migration_name,
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/db/migrations/autodetector.py", line 43, in changes
changes = self._detect_changes(convert_apps, graph)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/db/migrations/autodetector.py", line 129, in _detect_changes
self.new_apps = self.to_state.apps
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/utils/functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/db/migrations/state.py", line 209, in apps
return StateApps(self.real_apps, self.models)
File "/home/michael/PycharmProjects/pcask/venv/lib/python3.6/site-packages/django/db/migrations/state.py", line 279, in __init__
raise ValueError("\n".join(error.msg for error in errors))
ValueError: The field post.Post.category was declared with a lazy reference to 'category.category', but app 'category' doesn't provide model 'category'.
My mixin classes look like:
class CommentMixin():
comment = models.TextField(default="", blank=True)
class Meta:
abstract = True
What is going on here?
Make your mixin classes inherit models.Model
, for example:
class CommentMixin(models.Model):
comment = models.TextField(default="", blank=True)
class Meta:
abstract = True
You can then remove models.Model
from your child classes, for example:
class Category(CommentMixin,
TitleMixin,
SlugMixin,
):
...