我有一个带有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,...
您需要在模板上的某处输出{{ form.media }}
(或{{ form.media.js }}
和{{ form.media.css }}
)-在呈现表单本身时不会自动发生。