Source code for pagetools.menus.models

from collections import defaultdict

from django import template
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.utils.translation import pgettext_lazy
from mptt.fields import TreeForeignKey
from mptt.managers import TreeManager
from mptt.models import MPTTModel

from pagetools import logger
from pagetools.menus.utils import get_menukey
from pagetools.models import LangManager, LangModel
from pagetools.utils import get_adminedit_url, get_classname

from .apps import MenusConfig
from .settings import MENU_TEMPLATE











[docs]@receiver(pre_delete) def delete_content(sender, **kwargs): if sender in (MenuEntry, MenuCache): return try: object_id = int(kwargs["instance"].pk) except ValueError: return content_type = ContentType.objects.get_for_model(sender) MenuEntry.objects.filter(content_type=content_type, object_id=object_id).delete()
[docs]class SelectedEntries(defaultdict): def __missing__(self, key): return ""
[docs]class AutoPopulated(AbstractLink): """ Add entries from a function. """ auto_children = True name = models.CharField(_("Name"), max_length=255, choices=(("a", "1"),)) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) choices = tuple((("%s" % k, "%s" % k) for k in MenusConfig.entrieable_auto_children)) self._meta.get_field("name").choices = choices
[docs] def get_children(self): return MenusConfig.auto_children_funcs[self.name]()
[docs] def get_absolute_url(self): return "."
[docs] @classmethod def show_in_menu_add(cls): return len(MenusConfig.entrieable_auto_children) > 0
class Meta: verbose_name = _("Autopopulated Entry") verbose_name_plural = _("Autopopulated Entries")