有没有办法将变量传递到Django元类中?

2024-10-02 08:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个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} })}

我的最佳选择是在__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} })}

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


Tags: 用户self属性定义init部件方式地图
1条回答
网友
1楼 · 发布于 2024-10-02 08:20:11

您可以使用以下命令指定小部件的属性:

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

相关问题 更多 >

    热门问题