mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-12 17:23:15 +00:00
pull re-usable methods of PageChooserBlock into an abstract superclass
This commit is contained in:
parent
d11205454b
commit
e01167ff1f
1 changed files with 19 additions and 11 deletions
|
|
@ -349,31 +349,39 @@ class RichTextBlock(FieldBlock):
|
|||
def render_basic(self, value):
|
||||
return mark_safe('<div class="rich-text">' + expand_db_html(value) + '</div>')
|
||||
|
||||
class PageChooserBlock(FieldBlock):
|
||||
|
||||
class ChooserBlock(FieldBlock):
|
||||
"""Abstract superclass for fields that implement a chooser interface (page, image, snippet etc)"""
|
||||
@cached_property
|
||||
def field(self):
|
||||
from wagtail.wagtailcore.models import Page # TODO: allow limiting to specific page types
|
||||
from wagtail.wagtailadmin.widgets import AdminPageChooser
|
||||
return ModelChoiceField(queryset=Page.objects.all(), widget=AdminPageChooser)
|
||||
return ModelChoiceField(queryset=self.target_model.objects.all(), widget=self.widget)
|
||||
|
||||
def to_python(self, value):
|
||||
from wagtail.wagtailcore.models import Page
|
||||
|
||||
if value is None or isinstance(value, Page):
|
||||
if value is None or isinstance(value, self.target_model):
|
||||
return value
|
||||
else:
|
||||
try:
|
||||
return Page.objects.get(pk=value) # TODO: use the specific class in place of Page where appropriate
|
||||
except Page.DoesNotExist:
|
||||
return self.target_model.objects.get(pk=value)
|
||||
except self.target_model.DoesNotExist:
|
||||
return None
|
||||
|
||||
def get_prep_value(self, value):
|
||||
from wagtail.wagtailcore.models import Page
|
||||
if isinstance(value, Page):
|
||||
if isinstance(value, self.target_model):
|
||||
return value.id
|
||||
else:
|
||||
return value
|
||||
|
||||
class PageChooserBlock(ChooserBlock):
|
||||
@cached_property
|
||||
def target_model(self):
|
||||
from wagtail.wagtailcore.models import Page # TODO: allow limiting to specific page types
|
||||
return Page
|
||||
|
||||
@cached_property
|
||||
def widget(self):
|
||||
from wagtail.wagtailadmin.widgets import AdminPageChooser
|
||||
return AdminPageChooser
|
||||
|
||||
def render_basic(self, value):
|
||||
if value:
|
||||
return format_html('<a href="{0}">{1}</a>', value.url, value.title)
|
||||
|
|
|
|||
Loading…
Reference in a new issue