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