#Issue with a MRO while migrating

3 messages · Page 1 of 1 (latest)

chrome zenith
#

Code:

from django.db import models
from django.contrib.contenttypes.models import ContentType


class NodeImageMixin(models.Model):
    image = models.ImageField('Node image', upload_to='node_images/', null=True, default=None)

    class Meta:
        abstract = True


class RelatedModelClassMixin(models.Model):
    _related_model_class = models.ForeignKey(to=ContentType, verbose_name='Corresponding model class', on_delete=models.DO_NOTHING, null=True, default=None)

    @property
    def related_model_class(self):
        return self._related_model_class.model_class()
    
    class Meta:
        abstract = True


class Section(models.Model):
    name = models.CharField(verbose_name='Section', max_length=100)

    class Meta:
        verbose_name = "Section"
        verbose_name_plural = "Sections"

    def __str__(self):
        return f"Section {self.name}"


class Subsection(NodeImageMixin):
    name = models.CharField(verbose_name='Subsection', max_length=50)
    section = models.ForeignKey(to=Section, verbose_name='Section', on_delete=models.DO_NOTHING)

    class Meta:
        verbose_name = "Subsection"
        verbose_name_plural = "Subsections"

    def __str__(self):
        return f"Subsection {self.name}"


class Category(NodeImageMixin, RelatedModelClassMixin):
    name = models.CharField(verbose_name='Category', max_length=50)
    subsection = models.ForeignKey(to=Subsection, verbose_name='Subsection', on_delete=models.DO_NOTHING)

    class Meta:
        verbose_name = "Category"
        verbose_name_plural = "Categories"

    def __str__(self):
        return f"Category {self.name}"
#
class Subcategory(NodeImageMixin, RelatedModelClassMixin):
    name = models.CharField(verbose_name='Subcategory', max_length=50)
    category = models.ForeignKey(to=Category, verbose_name='Category', on_delete=models.DO_NOTHING)

    class Meta:
        verbose_name = "Subcategory"
        verbose_name_plural = "Subcategories"

    def __str__(self):
        return f"Subcategory {self.name}"
#

Traceback:

Traceback (most recent call last):
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\webshop\manage.py", line 22, in <module>
    main()
    ~~~~^^
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\webshop\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\env\Lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
    utility.execute()
    ~~~~~~~~~~~~~~~^^
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\env\Lib\site-packages\django\core\management\__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\env\Lib\site-packages\django\core\management\base.py", line 416, in run_from_argv
    self.execute(*args, **cmd_options)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\env\Lib\site-packages\django\core\management\base.py", line 460, in execute
    output = self.handle(*args, **options)
  File "C:\Users\RawParmesan\Documents\webshop-dev\shop\env\Lib\site-packages\django\core\management\base.py", line 107, in wrapper
    res = handle_func(*args, **kwargs)