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

时间:2014-06-07 20:12:07

标签: python django django-models

我有一个像这样的模型类

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 :(得分:0)

您必须编写自定义小部件。 请查看thisthisdjango documentation。 你可能需要写south introspection rules

答案 1 :(得分:0)

有一个django-easy-maps模块可以完全满足您的需求(除了其他功能):

  

django-easy-maps提供了显示地图下的地图的基本小部件   地址字段。它可以在管理员中用于地图预览。

请注意,您无需更改模型并编写任何特定的迁移。它适用于开箱即用的CharFieldTextField

关注installation instructions并将以下内容添加到您应用的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)

答案 2 :(得分:0)

我最终会引用此tutorial来创建自定义窗口小部件。

对于任何有兴趣的人,这是我的代码

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)