Rok*_*Rok 5 django-admin geodjango
我想知道如何在 admin 中更改默认的 PointField 可视化(Openstreetmap),以便我可以输入简单的纬度/经度而不是在地图上选择一个点?
我看着这个点域的纬度/经度小部件?但无法在 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
Run Code Online (Sandbox Code Playgroud)
现在您可以覆盖模型管理员:
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},
}
Run Code Online (Sandbox Code Playgroud)
您可以在 Django 管理中用另一个小部件覆盖一个小部件。从文档中-
from django.db import models
from django.contrib import admin
# Import our custom widget and our model from where they're defined
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}
Run Code Online (Sandbox Code Playgroud)
这会TextField覆盖RichTextEditorWidget. 只需找到点字段的字段类型并用 TextField 覆盖它即可。
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |