Rog*_*ger 4 django django-forms
我的Django应用程序使用Django Suit作为主题Django管理应用程序的工具.Suit可以做的事情之一是追加和预置元素以形成小部件,如:
class PropertyForm(ModelForm):
class Meta:
model = Property
widgets = {
'amount': EnclosedInput(prepend = "GBP"),
}
Run Code Online (Sandbox Code Playgroud)
效果是:

虽然这是一个很好的功能,但如果我可以动态添加它(如伪代码)会更有用:
'amount': EnclosedInput(prepend = my_model_instance.currency)
Run Code Online (Sandbox Code Playgroud)
我试图像这样覆盖表单的init:
class PropertyForm(ModelForm):
def __init__(self, *args, **kwargs):
inst = kwargs["instance"]
self._meta.widgets["amount"] = EnclosedInput(prepend = inst.currency)
super(PropertyForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,只有当我在init方法中放置断点时才有效.看起来有一些时间问题.
所以我的问题是实现这一目标的最佳方式(如果可以的话)是什么?
Rog*_*ger 10
问题在于:
self._meta.widgets["amount"] = EnclosedInput(prepend = inst.currency)
Run Code Online (Sandbox Code Playgroud)
事实证明_meta正在缓存.当我将上面的行更改为(这也是一个更好的解决方案,因为_meta可能是私有的):
self.fields['amount'].widget = EnclosedInput(prepend = inst.currency)
Run Code Online (Sandbox Code Playgroud)
......它完美无瑕
| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |