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)
@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()))