Django - 在管理员中添加额外的HTML
我有一个模型类,长得像这样:
models.py
class Places(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=50)
tel = models.CharField(max_length=50)
我想在地址字段下面放一个谷歌地图,并在地址字段旁边放一个自定义按钮。这个按钮的作用是,当用户点击它时,根据输入的地址来标记位置。
所以,我的问题是,怎么把这个按钮放在地址字段旁边,并在下面加上HTML标签来显示地图呢?
谢谢。
3 个回答
0
有一个叫做 django-easy-maps
的模块,正好可以满足你的需求(还有其他一些功能):
django-easy-maps 提供了一个基本的小工具,可以在地址输入框下面显示地图。这个功能可以在后台管理中用来预览地图。
值得注意的是,你不需要修改你的模型,也不需要写任何特定的迁移代码。它可以直接和 CharField
或 TextField
一起使用。
按照 安装说明 的步骤操作,然后在你的应用的 admin.py
文件中添加以下内容:
from django import forms
from django.contrib import admin
from easy_maps.widgets import AddressWithMapWidget
from my_app.models import Places
class PlacesAdmin(admin.ModelAdmin):
class form(forms.ModelForm):
class Meta:
widgets = {
'address': AddressWithMapWidget({'class': 'vTextField'})
}
admin.site.register(Places, PlacesAdmin)
0
你需要自己写一个自定义的控件。可以看看这个链接、这个链接和Django的文档。你可能还需要写一些south的自省规则。
0
我最终参考了这个教程来创建一个自定义的小部件。
对于感兴趣的朋友,这里是我的代码:
widgets.py
class AddressFieldWidget(forms.TextInput):
def render(self, name, value, attrs=None):
html = super(AddressFieldWidget, self).render(name, value,
attrs)
html = html + """ <input type="button" value="GeoCode" class="getgeo btn"><br><br><label>Map</label><div id="gmap">This is for map rendering</div>"""
return mark_safe(html)
admin.py
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'address':
kwargs['widget'] = AddressFieldWidget
return super(AdminListing,self).formfield_for_dbfield(db_field,**kwargs)