Last active
May 6, 2016 13:09
-
-
Save nimasmi/edd58573e7f8c49bc2ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from wagtail.wagtailcore.models import get_page_models | |
from wagtail.wagtailcore.utils import resolve_model_string | |
class SinglePageInstanceMixin(object): | |
@classmethod | |
def clean_parent_page_types(cls): | |
""" | |
Rewrite wagtailcore.models.Page.clean_parent_page_models to ensure that | |
this is recalculated every time it's needed, rather than only the first | |
time. It returns parent_page_models, normalised as model classes, if so | |
defined on the model, otherwise all page-derived models, but only if no | |
instance of this Page-derived class currently exists. Otherwise returns | |
[], thus enforcing (in view logic) that only one instance of this class | |
can exist at a time. | |
""" | |
if cls.objects.all().exists(): | |
return [] | |
else: | |
parent_page_types = getattr(cls, 'parent_page_types', None) | |
if parent_page_types is None: | |
# if parent_page_types is not specified on the Page class, allow all page types as subpages | |
res = get_page_models() | |
else: | |
res = [ | |
resolve_model_string(model_string, cls._meta.app_label) | |
for model_string in parent_page_types | |
] | |
for model in res: | |
if not issubclass(model, Page): | |
raise LookupError("%s is not a Page subclass" % model) | |
return res |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment