Django / Wagtail-自定义表单窗口小部件CSS / JS媒体未与模板文件一起呈现

问题描述 投票:0回答:1

我有一个带有Address字段的基本formatted_address模型,该模型使用自定义的LocationPicker小部件(本质上是用于搜索地址的自动完成功能。)>

几个类继承自Address,包括下面的我的Place类。

models.py

class Address(models.Model):
    formatted_address = models.CharField(max_length=500, verbose_name='address')
    ...

    class Meta:
        abstract = True


class Place(ClusterableModel, Address)
    ...

    panels = [
        MultiFieldPanel([
            FieldPanel('formatted_address', widget=LocationPicker(attrs={'placeholder': 'Search addresses')),
            FieldPanel('some_other_field')
        ], heading='My field group')

widgets.py

class LocationPicker(WidgetWithScript, TextInput):
    template_name = 'places/forms/widgets/location_picker.html'

    @property
    def media(self):
        print('get media')
        return Media(
            css={'screen': ('places/css/location-picker.css',)},
            js=('places/js/location-picker.js',),
        )

此小部件在Wagtail管理员中看起来不错,我已经在其中为其注册了一个ModelAdmin实例。

但是,我的问题是我无法使小部件在我的原始Django ModelForm中正确显示。窗口小部件模板文件已呈现,但不包括关联的媒体。

我创建了如下表单:

forms.py

class PlaceForm(ModelForm):

    class Meta:
        model = Place
        fields = '__all__'
        widgets = {
            'formatted_address': LocationPicker(attrs={'placeholder': 'Search addresses')
        }

无论我尝试过什么,呈现表单时都不包括小部件的媒体。 'get media'打印输出甚至没有出现。

我确定这是可以做到的,但我不知道我在这里缺少什么明显的东西。

我有一个带有formatted_address字段的基本地址模型,该模型使用自定义的LocationPicker小部件(本质上是用于搜索地址的自动完成功能)。几个类继承自Address,...

python django wagtail
1个回答
0
投票

您需要在模板上的某处输出{{ form.media }}(或{{ form.media.js }}{{ form.media.css }})-在呈现表单本身时不会自动发生。

© www.soinside.com 2019 - 2024. All rights reserved.