Django - 在管理员中添加额外的HTML

1 投票
3 回答
1667 浏览
提问于 2025-04-18 08:59

我有一个模型类,长得像这样:

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 提供了一个基本的小工具,可以在地址输入框下面显示地图。这个功能可以在后台管理中用来预览地图。

值得注意的是,你不需要修改你的模型,也不需要写任何特定的迁移代码。它可以直接和 CharFieldTextField 一起使用。

按照 安装说明 的步骤操作,然后在你的应用的 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)

撰写回答