我想知道如何在管理员中更改默认的PointField可视化效果(Openstreetmap),以便可以输入简单的纬度/经度而不是在地图上选择一个点?

我查看了这个Latitude/longitude widget for pointfield?,但无法在Django 1.6b4中以任何方式使其工作

谢谢

最佳答案

正如Bibhas所说,您可以覆盖用于该字段的小部件,但是简单的文本输入可能没有用。因此,这是一个具有完整小部件的示例,可用于geodjango的PointField:

class LatLongWidget(forms.MultiWidget):
    """
    A Widget that splits Point input into latitude/longitude text inputs.
    """

    def __init__(self, attrs=None, date_format=None, time_format=None):
        widgets = (forms.TextInput(attrs=attrs),
                   forms.TextInput(attrs=attrs))
        super(LatLongWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return tuple(value.coords)
        return (None, None)

    def value_from_datadict(self, data, files, name):
        mylat = data[name + '_0']
        mylong = data[name + '_1']

        try:
            point = Point(float(mylat), float(mylong))
        except ValueError:
            return ''

        return point


现在,您可以覆盖模型管理员:

from django.contrib.gis.db import models as geomodels
class CompanyAdmin(admin.ModelAdmin):
    list_display = ('name', 'approval', 'company_view',)
    list_filter = ('approval',)
    formfield_overrides = {
        geomodels.PointField: {'widget': LatLongWidget},
    }

关于django-admin - GeoDjango PointField管理员可视化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19231109/

10-13 02:32