我正在尝试以 django 形式本地化模型浮点字段。
这样就可以工作了:
super(....)
self.fields["field_name"] = forms.FloatField(localize=True)
但是我不想定义新的表单字段,而是想将本地化添加到现有的模型字段中。这样就行不通了:
super(....)
self.fields['field_name'].localize = True
有谁知道我的方法哪里出了问题?
谢谢, 乔纳斯
问题在于,表单字段在实例化时会进行各种初始化,并且之后设置
localize
属性不会重新运行该初始化。请参阅代码。
您可以通过在小部件上另外设置
is_localized
属性来获得大部分您想要的内容:
self.fields['field_name'].localize = True
self.fields['field_name'].widget.is_localized = True
但此时您可能最好重新声明该字段。
我的方法是:
设置.py
DECIMAL_SEPARATOR = ','
USE_THOUSAND_SEPARATOR = True
表单的__init__函数
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
self.fields['field'].localize = True
self.fields['field'].widget.is_localized = True
Django 提供了一种方法来明确告知哪些字段应该本地化。 您只需将“localized_fields”添加到元模型类中即可。
class FormEditBuilding(forms.ModelForm):
class Meta:
model = Building
exclude = []
localized_fields = ['apartments_sqm', 'offices_sqm']
Django 文档:https://docs.djangoproject.com/en/5.0/topics/forms/modelforms/#enabling-localization-of-fields
感谢@heyhugo