首页 > 解决方案 > 用于点数组的 Django 小部件

问题描述

我有一个带字段的模型

myfield = ArrayField(geo_models.PointField(null=False, blank=False), null=False)

而且我找不到在 Django Admin 中表示它的方法。

我尝试使用 django_better_admin https://github.com/gradam/django-better-admin-arrayfield

from .widget import PointWidget
from django_better_admin_arrayfield.admin.mixins import DynamicArrayMixin

@admin.register(myModel)
class MyModelAdmin(admin.ModelAdmin, DynamicArrayMixin):
    formfield_overrides = {
        DynamicArrayField: {'widget': PointWidget},
    }

和 PointWidget:

class PointWidget(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(PointWidget, 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

但是表单中仍然只有一个 TextField 并且无法填写 阵列场

标签: djangopostgresqldjango-forms

解决方案


推荐阅读