表单中 Django 模型浮动字段的本地化

问题描述 投票:0回答:3

我正在尝试以 django 形式本地化模型浮点字段。

这样就可以工作了:

super(....)
self.fields["field_name"] = forms.FloatField(localize=True)

但是我不想定义新的表单字段,而是想将本地化添加到现有的模型字段中。这样就行不通了:

super(....)
self.fields['field_name'].localize = True

有谁知道我的方法哪里出了问题?

谢谢, 乔纳斯

django localization floating-point django-forms
3个回答
3
投票

问题在于,表单字段在实例化时会进行各种初始化,并且之后设置

localize
属性不会重新运行该初始化。请参阅代码

您可以通过在小部件上另外设置

is_localized
属性来获得大部分您想要的内容:

self.fields['field_name'].localize = True
self.fields['field_name'].widget.is_localized = True

但此时您可能最好重新声明该字段。


1
投票

我的方法是:

设置.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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.