python - 有什么方法可以将变量传递给 django 元类?

标签 python django attributes leaflet metaclass

我正在开发一个允许用户在 map 上创建点的 Django 应用程序。为了便于使用,这张 map 需要以某个位置为中心,而且这个位置是可变的。我正在使用 LeafletWidget 让用户创建这个点。

map 可以通过改变 LeafletWidget 的属性来居中。不幸的是,这个小部件是在 Meta 类中定义的,据我所知,您不能将变量传递给它。这是我想做的一个例子,以某种方式将变量 center 传递给 Meta 类。 center 是一个包含纬度和经度值的元组。这个示例代码当然不起作用。我不知道您是否可以通过某种方式将变量传递给 Meta 类。

class PointModelForm(ModelForm):
    class Meta(center):
        model = PointModel
        fields = ['name', 'point']
        widgets = {'point': LeafletWidget(attrs={'settings_overrides': {'DEFAULT_CENTER': center} })}

我最好的选择是在 __init__ 函数中定义 widgets 属性,但是如果我是正确的,Meta 类无法访问这些属性。当我运行它时,没有使用任何小部件。

class PointModelForm(ModelForm):
    class Meta:
        model = PointModel
        fields = ['name', 'point']

    def __init__(self, center):
        super(PointModelForm, self).__init__()
        self.widgets = {'point': LeafletWidget(attrs={'settings_overrides': {'DEFAULT_CENTER': center} })}

你知道怎么做吗?提前致谢!

最佳答案

您可以指定小部件的属性:

class PointModelForm(ModelForm):
    class Meta:
        model = PointModel
        fields = ['name', 'point']

    def __init__(self, *args, center=None, **kwargs):
        super(PointModelForm, self).__init__(*args, **kwargs)
        if center is not None:
            attrs = self.fields['point'].widget.attrs
            subattrs = attrs.setdefault('settings_overrides', {})
            <b>subattrs['DEFAULT_CENTER'] = center</b>

然后您可以构造一个 PointModelForm :

PointModelForm(<b>center=(55, 12)</b>)  # for GET request
PointModelForm(request.POST, request.FILES<b>, center=(55, 12)</b>)  # for POST request

关于python - 有什么方法可以将变量传递给 django 元类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63381375/

相关文章:

C# 属性 : One Attribute to Rule Them All?

c# - 在 .NET 中使用属性的性能开销

python - 从 orm 查询检索的对象中获取字段名称

python - 所有列上的 SQLAlchemy 继承过滤器

python - 使用 PyPDF2 向 PDF 添加书签

python - Itertools 创建列表并计算概率

python - django 中的自定义用户引发 ValueError

django - 内置的Docker镜像无法达到PostgreSQL

c++ - 如何从 XML 文件中读取信息 C++

python - 有没有办法将一行中的多个元素添加到 python 集合中?