Jquery 将django表单(formset)中的十进制数加载到数字输入中

Jquery 将django表单(formset)中的十进制数加载到数字输入中,jquery,python,django,forms,validation,Jquery,Python,Django,Forms,Validation,我正在创建一个简单的django应用程序,您可以在其中创建包含配料的食谱。在我的RecipeCreate视图中,我有一个简单的表单集,其中有一个select输入(在这里选择产品)和一个带有产品计数的input type=“number”。因此,我的形式和模型非常简单: class Ingredient(models.Model): product = models.ForeignKey(Product) count = models.DecimalField(max_digits

我正在创建一个简单的django应用程序,您可以在其中创建包含配料的食谱。在我的
RecipeCreate
视图中,我有一个简单的表单集,其中有一个
select
输入(在这里选择产品)和一个带有产品计数的
input type=“number”
。因此,我的形式和模型非常简单:

class Ingredient(models.Model):
    product = models.ForeignKey(Product)
    count = models.DecimalField(max_digits=4, decimal_places=2)

class IngredientForm(forms.ModelForm):
    class Meta:
        model = Ingredient
        fields = ('product', 'count') 
现在,当我想在我的
RecipeEdit
上显示我的配方时,除了
count
输入之外,所有加载都正常。我得到以下jQuery验证错误:

The specified value "12,00" is not a valid number. The value 
must match to the following regular expression: -?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?
因为我在写一个波兰网站,所以我希望我们的国家标准十进制分隔符是
不是
(但点也应该是分隔符)

解决方案之一是使用
输入type=“text”
,但这意味着我必须手动验证我的号码,这很麻烦。 是否有办法传递我的号码
12,00
,以便输入字段接受该号码。是否可能更改/覆盖标准jQuery验证?但我会接受任何好的解决方案


另一个奇怪的事实是,当我手动编写
12,00
12.00
并提交我的表单时,我的表单是有效的,并且我的
成分
计数字段的OD12值正是我想要的。这是另一个用于
输入type=“number”

的pro,您可以在jQuery代码中转换计数值:

dotCount = count.toString().replace(',', '.');

这将逗号替换为点

您可以设置您的区域设置

更新:

没有看到它与jquery相关

例如,您可以为逗号数字创建新的验证器类

jQuery.validator.addMethod("commanumber", function (value, element) {
    return this.optional(element) || /^(\d+|\d+,\d{1,2})$/.test(value);
}, "Please specify the correct number format");

甚至扩展regex来支持。还有

好的,我做过类似的事情。首先,我使用的是输入类型=“text”。然后使用转换输入,使其只接受数字和一个
作为十进制分隔符

$("#field_id").numeric({ decimal : "," });
现在,每次提交表单时,我都会有一些代码将我的
转换为
,以便符合后端逻辑:

$('#recipe-form').on('submit', function(){
    $('.convert-separator').each(function () {
        $(this).val($(this).val().replace(',','.'));
    });
    this.submit();
});
但我认为这不是最好的解决办法。我认为一定有可能将
输入类型=“number”
字段与
分隔符一起使用。

我找到了哪一个可以描述您的问题。作者建议使用lang属性,例如

$("#field_id").numeric({ decimal : "," });
还有一个关于

4.10.5.2关于表单控制本地化的实施说明

本节是非规范性的

在日期、时间和数字控件中向用户显示的格式为 独立于表单提交所使用的格式

鼓励浏览器使用显示日期的用户界面, 根据两种语言环境的约定确定时间和数字 由输入元素的语言或用户的首选语言暗示 场所使用页面的区域设置将确保与 页面提供了数据

例如,如果使用美式英语,用户会感到困惑 佩奇声称太阳马戏团的一场表演将在电视上播出 02/03,但他们的浏览器配置为使用英式英语 区域设置,仅在票证购买日期选择器中显示日期03/02。 使用页面的区域设置至少可以确保日期是 到处都以相同的格式呈现。(仍然存在这样的风险 当然,用户最终会晚到一个月,但是还有一个问题 对于这种文化差异,我们只能做这么多……)


当然可以,但这仍然意味着我会先在控制台中收到警告,然后输入一个带有
分隔符的数字。我希望有一个
作为我的标准初始分隔符,但它也应该接受一个
我使用的
USE\u L10N
,因此我的十进制分隔符是
,就像我在问题中提到的那样。如果将小数点分隔符设置为
,则不会出现警告消息。但是,即使在
document.ready
之后,我仍然无法将十进制分隔符更改为
,因为
type=“number”
不允许。您使用的语言标记(language\u code)是什么?language\u code='pl'我非常喜欢自定义验证器的此选项。你能告诉我怎么用吗?是否可以在
input type=“number”
字段中使用它,以便覆盖标准有效性?扩展正则表达式的部分也是我一直在考虑的一种方式,但尽管我一直在我的
jquery.min.js
文件中更改正则表达式,但在我的浏览器中没有看到它。我使用的是
CTRL+F5
,但我不知道为什么我的浏览器总是看到带有旧正则表达式的旧文件。更改
jquery.min.js
PyCharm时告诉我:
生成的源文件不应编辑。当重新生成源代码时,更改将丢失
,因此我放弃了这一点。也许您知道如何避免这个问题?看起来还可以,但问题在于jQuery验证。真的不管用。