mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-05-12 09:13:14 +00:00
fix PageChooserBlock to return a page object rather than an ID.
AdminPageChooser has been tweaked to accept either an ID or an instance as its input value, and FieldBlock now passes the result of value_from_datadict through to_python to deal with the case where the widget doesn't return our expected type.
This commit is contained in:
parent
34bd4bd974
commit
d11205454b
2 changed files with 18 additions and 5 deletions
|
|
@ -330,7 +330,7 @@ class FieldBlock(Block):
|
|||
})
|
||||
|
||||
def value_from_datadict(self, data, files, prefix):
|
||||
return self.field.widget.value_from_datadict(data, files, prefix)
|
||||
return self.to_python(self.field.widget.value_from_datadict(data, files, prefix))
|
||||
|
||||
def clean(self, value):
|
||||
return self.field.clean(value)
|
||||
|
|
@ -368,11 +368,16 @@ class PageChooserBlock(FieldBlock):
|
|||
return None
|
||||
|
||||
def get_prep_value(self, value):
|
||||
from wagtail.wagtailcore.models import Page
|
||||
if isinstance(value, Page):
|
||||
return value.id
|
||||
else:
|
||||
return value
|
||||
|
||||
def render_basic(self, value):
|
||||
if value:
|
||||
return format_html('<a href="{0}">{1}</a>', value.url, value.title)
|
||||
|
||||
# =======
|
||||
# Chooser
|
||||
# =======
|
||||
|
|
|
|||
|
|
@ -82,10 +82,14 @@ class AdminPageChooser(AdminChooser):
|
|||
self.target_content_type = content_type or ContentType.objects.get_for_model(Page)
|
||||
|
||||
def render_html(self, name, value, attrs):
|
||||
original_field_html = super(AdminPageChooser, self).render_html(name, value, attrs)
|
||||
|
||||
model_class = self.target_content_type.model_class()
|
||||
instance = self.get_instance(model_class, value)
|
||||
if isinstance(value, model_class):
|
||||
instance = value
|
||||
value = value.pk
|
||||
else:
|
||||
instance = self.get_instance(model_class, value)
|
||||
|
||||
original_field_html = super(AdminPageChooser, self).render_html(name, value, attrs)
|
||||
|
||||
return render_to_string("wagtailadmin/widgets/page_chooser.html", {
|
||||
'widget': self,
|
||||
|
|
@ -96,7 +100,11 @@ class AdminPageChooser(AdminChooser):
|
|||
})
|
||||
|
||||
def render_js_init(self, id_, name, value):
|
||||
page = Page.objects.get(pk=value) if value else None
|
||||
model_class = self.target_content_type.model_class()
|
||||
if isinstance(value, model_class):
|
||||
page = value
|
||||
else:
|
||||
page = self.get_instance(model_class, value)
|
||||
parent = page.get_parent() if page else None
|
||||
content_type = self.target_content_type
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue