def test_custom_instance_selector_can_be_registered(self):
        class TestInstanceSelector(BaseInstanceSelector):
            pass

        registry.register_instance_selector(TestModelB, TestInstanceSelector())
        self.assertIsInstance(registry.get_instance_selector(TestModelB),
                              TestInstanceSelector)
    def test_widget_can_lookup_updated_custom_display_information(self):
        class TestInstanceSelector(BaseInstanceSelector):
            def get_instance_display_markup(self, instance):
                return "test display markup"

            def get_instance_edit_url(self, instance):
                return "test edit url"

        registry.register_instance_selector(TestModelA, TestInstanceSelector())

        a = TestModelA.objects.create()

        lookup_url = "%s?%s=%s" % (
            reverse(
                "wagtail_instance_selector_lookup",
                kwargs={
                    "app_label": "test_app",
                    "model_name": "TestModelA"
                },
            ),
            OBJECT_PK_PARAM,
            a.pk,
        )
        res = self.app.get(lookup_url, user=self.superuser)
        self.assertEqual(
            res.json,
            {
                "display_markup": "test display markup",
                "edit_url": "test edit url",
                "pk": "%s" % a.pk,
            },
        )
    def test_widget_can_render_custom_display_markup(self):
        class TestInstanceSelector(ModelAdminInstanceSelector):
            def get_instance_display_markup(self, instance):
                return "test display markup"

        registry.register_instance_selector(
            TestModelA, TestInstanceSelector(model_admin=TestModelAAdmin()))

        a = TestModelA.objects.create()
        b = TestModelB.objects.create(test_model_a=a)

        res = self.app.get("/admin/test_app/testmodelb/edit/%s/" % b.pk,
                           user=self.superuser)
        self.assertIn("test display markup", res.text)
    def test_embed_view_renders_custom_selector_url(self):
        class TestInstanceSelector(ModelAdminInstanceSelector):
            def get_instance_selector_url(self):
                return "test selector url"

        registry.register_instance_selector(
            TestModelA, TestInstanceSelector(model_admin=TestModelAAdmin()))
        embed_url = reverse(
            "wagtail_instance_selector_embed",
            kwargs={
                "app_label": "test_app",
                "model_name": "TestModelA"
            },
        )
        res = self.app.get(embed_url, user=self.superuser)
        self.assertIn(
            '<iframe src="test selector url#instance_selector_embed_id:test_app-testmodela-',
            res.text,
        )
    def test_widget_can_render_custom_display_data(self):
        class TestInstanceSelector(BaseInstanceSelector):
            def get_instance_display_title(self, instance):
                return "test display title"

            def get_instance_display_image_url(self, instance):
                return "test display image url"

            def get_instance_edit_url(self, instance):
                return "test edit url"

        registry.register_instance_selector(TestModelA, TestInstanceSelector())

        a = TestModelA.objects.create()
        b = TestModelB.objects.create(test_model_a=a)

        res = self.app.get("/admin/test_app/testmodelb/edit/%s/" % b.pk,
                           user=self.superuser)
        self.assertIn(
            '<span class="instance-selector-widget__display__title">test display title</span>',
            res.text,
        )
        self.assertIn('src="test display image url"', res.text)
        self.assertIn('href="test edit url"', res.text)
Example #6
0
@modeladmin_register
class ProductAdmin(ModelAdmin):
    model = Product


@modeladmin_register
class ImageAdmin(ModelAdmin):
    model = Image
    list_display = ("__str__", "image_preview")
    list_filter = ("status", )

    def image_preview(self, instance):
        if instance:
            return mark_safe(
                '<img src="%s" style="max-width: 165px; max-height: 165px;">' %
                instance.image.url)
        return ""

    image_preview.short_description = "Image"


class ImageInstanceSelector(ModelAdminInstanceSelector):
    def get_instance_display_image_url(self, instance):
        if instance:
            return instance.image.url


registry.register_instance_selector(
    Image, ImageInstanceSelector(model_admin=ImageAdmin()))