gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:09:35 27 4
gpt4 key购买 nike

我正在开发一个允许用户在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com