From 76b0964c940ceeb79e8f73fea0f2d03e97ef3735 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 11 Feb 2015 12:20:32 +0000 Subject: [PATCH 1/2] add DocumentChooserBlock --- wagtail/wagtaildocs/blocks.py | 23 +++++++++++++++++++++++ wagtail/wagtaildocs/widgets.py | 3 +-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 wagtail/wagtaildocs/blocks.py diff --git a/wagtail/wagtaildocs/blocks.py b/wagtail/wagtaildocs/blocks.py new file mode 100644 index 000000000..07e893d74 --- /dev/null +++ b/wagtail/wagtaildocs/blocks.py @@ -0,0 +1,23 @@ +from __future__ import unicode_literals + +from django.utils.functional import cached_property +from django.utils.html import format_html + +from wagtail.wagtailadmin.blocks import ChooserBlock + +class DocumentChooserBlock(ChooserBlock): + @cached_property + def target_model(self): + from wagtail.wagtaildocs.models import Document + return Document + + @cached_property + def widget(self): + from wagtail.wagtaildocs.widgets import AdminDocumentChooser + return AdminDocumentChooser + + def render_basic(self, value): + if value: + return format_html('{1}', value.url, value.title) + else: + return '' diff --git a/wagtail/wagtaildocs/widgets.py b/wagtail/wagtaildocs/widgets.py index 73267b539..75225ef0c 100644 --- a/wagtail/wagtaildocs/widgets.py +++ b/wagtail/wagtaildocs/widgets.py @@ -14,10 +14,9 @@ class AdminDocumentChooser(AdminChooser): choose_another_text = _('Choose another document') def render_html(self, name, value, attrs): + instance, value = self.get_instance_and_id(Document, value) original_field_html = super(AdminDocumentChooser, self).render_html(name, value, attrs) - instance = self.get_instance(Document, value) - return render_to_string("wagtaildocs/widgets/document_chooser.html", { 'widget': self, 'original_field_html': original_field_html, From 85902d111db2a11c4ac93344a615a230e9124c76 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 11 Feb 2015 12:39:44 +0000 Subject: [PATCH 2/2] implement SnippetChooserBlock --- wagtail/wagtailsnippets/blocks.py | 17 +++++++++++++++++ wagtail/wagtailsnippets/widgets.py | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 wagtail/wagtailsnippets/blocks.py diff --git a/wagtail/wagtailsnippets/blocks.py b/wagtail/wagtailsnippets/blocks.py new file mode 100644 index 000000000..560cdf7f7 --- /dev/null +++ b/wagtail/wagtailsnippets/blocks.py @@ -0,0 +1,17 @@ +from __future__ import unicode_literals + +from django.utils.functional import cached_property +from django.contrib.contenttypes.models import ContentType + +from wagtail.wagtailadmin.blocks import ChooserBlock + +class SnippetChooserBlock(ChooserBlock): + def __init__(self, target_model, **kwargs): + super(SnippetChooserBlock, self).__init__(**kwargs) + self.target_model = target_model + + @cached_property + def widget(self): + from wagtail.wagtailsnippets.widgets import AdminSnippetChooser + content_type = ContentType.objects.get_for_model(self.target_model) + return AdminSnippetChooser(content_type) diff --git a/wagtail/wagtailsnippets/widgets.py b/wagtail/wagtailsnippets/widgets.py index 611efc40f..8c58e16f0 100644 --- a/wagtail/wagtailsnippets/widgets.py +++ b/wagtail/wagtailsnippets/widgets.py @@ -22,10 +22,10 @@ class AdminSnippetChooser(AdminChooser): self.target_content_type = content_type def render_html(self, name, value, attrs): - original_field_html = super(AdminSnippetChooser, self).render_html(name, value, attrs) - model_class = self.target_content_type.model_class() - instance = self.get_instance(model_class, value) + instance, value = self.get_instance_and_id(model_class, value) + + original_field_html = super(AdminSnippetChooser, self).render_html(name, value, attrs) return render_to_string("wagtailsnippets/widgets/snippet_chooser.html", { 'widget': self,