有什么方法可以将变量传递到django元类中?

问题描述

我正在使用django应用程序,该应用程序允许用户在地图上创建一个点。为了便于使用,此地图需要居中于某个位置,并且此位置是可变的。我正在使用LeafletWidget让用户创建这一点。

可以通过更改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} })}

我最好的选择是在widgets函数中定义__init__属性,但是如果我正确的话,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',{})
            subattrs['DEFAULT_CENTER'] = center

然后您可以使用以下方法构造一个PointModelForm

PointModelForm(center=(55,12))  # for GET request
PointModelForm(request.POST,request.FILES,center=(55,12))  # for POST request

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...