有什么方法可以将变量传递给 django meta class?
Any way to pass a variable into a django meta class?
我正在开发一个允许用户在地图上创建点的 Django 应用程序。为了便于使用,这张地图需要以某个位置为中心,而这个位置是可变的。我正在使用 LeafletWidget
让用户创建这个点。
地图可以通过改变 LeafletWidget
的属性来居中。不幸的是,这个小部件是在 Meta
class 中定义的,据我所知,您不能将变量传递给它。这是我想做的一个例子,以某种方式将变量 center
传递给 Meta
class。 center
是一个包含纬度和经度值的元组。这个示例代码当然不起作用。我不知道你是否能以某种方式将变量传递给 Meta
class.
class PointModelForm(ModelForm):
class Meta(center):
model = PointModel
fields = ['name', 'point']
widgets = {'point': LeafletWidget(attrs={'settings_overrides': {'DEFAULT_CENTER': center} })}
我最好的选择是在 __init__
函数中定义 widgets
属性,但是如果我是正确的,Meta
classes 无法访问这些属性。当我 运行 这没有使用小部件。
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
我正在开发一个允许用户在地图上创建点的 Django 应用程序。为了便于使用,这张地图需要以某个位置为中心,而这个位置是可变的。我正在使用 LeafletWidget
让用户创建这个点。
地图可以通过改变 LeafletWidget
的属性来居中。不幸的是,这个小部件是在 Meta
class 中定义的,据我所知,您不能将变量传递给它。这是我想做的一个例子,以某种方式将变量 center
传递给 Meta
class。 center
是一个包含纬度和经度值的元组。这个示例代码当然不起作用。我不知道你是否能以某种方式将变量传递给 Meta
class.
class PointModelForm(ModelForm):
class Meta(center):
model = PointModel
fields = ['name', 'point']
widgets = {'point': LeafletWidget(attrs={'settings_overrides': {'DEFAULT_CENTER': center} })}
我最好的选择是在 __init__
函数中定义 widgets
属性,但是如果我是正确的,Meta
classes 无法访问这些属性。当我 运行 这没有使用小部件。
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