我的 Django 应用程序使用 Django Suit 作为 Django 管理应用程序主题的工具。Suit 可以做的一件事是附加和前置元素以形成小部件,例如:
class PropertyForm(ModelForm):
class Meta:
model = Property
widgets = {
'amount': EnclosedInput(prepend = "GBP"),
}
效果是:
虽然这是一个不错的功能,但如果我可以像(在伪代码中)那样动态添加它会更有用:
'amount': EnclosedInput(prepend = my_model_instance.currency)
我试图像这样覆盖表单的初始化:
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)
奇怪的是,只有当我在init方法中放置断点时才有效。似乎涉及一些时间问题。
所以我的问题是实现这一点的最佳方式(如果有的话)是什么?