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,