gpt4 book ai didi

django - 如何让用户输入逗号

转载 作者:行者123 更新时间:2023-12-02 05:11:48 25 4
gpt4 key购买 nike

我有一个交易模型。该交易模型有一个金额字段 (DecimaField)。当我尝试输入 1,000 时,它不允许我保存数据但没有显示错误,它只是刷新。我尝试将本地化放在模型中,但它仍然不允许我这样做。

如何让表单接受逗号(1,000)?

这是我的代码:

表单.py

class AddTransactionForm(forms.ModelForm):
amount = forms.DecimalField(localize=True)

class Meta:
model = Transaction
exclude = ('envelope', 'uid',)

def __init__(self, user, *args, **kwargs):
super(AddTransactionForm, self).__init__(*args, **kwargs)
//other codes here

views.py

我也在 View 中尝试在完全保存之前替换逗号,但它给了我一个错误。

def transaction(request):   
if request.method == 'POST':
if request.POST['process'] == 'addtrans':
tform = AddTransactionForm(request.user,
request.POST)
if tform.is_valid():
if request.POST['type'] == 'withdrawal':
trans = tform.save(commit=False)
trans.amount = 0 - trans.amount
trans.save()
messages.success(request,
"Transaction created successfully.")
else:
trans = tform.save()
messages.success(request,
"Transaction created successfully.")

if not trans.account:
env = Envelope.objects.get(
user=request.user,
name='Unallocated Income')
trans.envelope = env
trans.save()
env.amount += trans.amount
env.save()
messages.success(request,
"Unallocate income save")
return HttpResponseRedirect(reverse('transactions:transaction'))

return render(request, 'trans_list.html', {
.........
})

我不想修改我的模型。有没有办法在表单或 View 中?

最佳答案

这取决于您期望逗号的含义。是用作千位分隔符,还是要启用基于区域设置的数字输入。

假设我们讨论的是代表一千美元二十三美分的十进制数。

en-us 语言环境中,这可以用 1000.23 表示,或者在使用千位分隔符时表示为 1,000.23。某些语言环境使用逗号来标记小数点分隔符,因此在 de-de(德语)语言环境中,例如,该数字可以表示为 1000,23 1.000,23.

从示例中可以看出,逗号可以有两个不同的含义。

如果你想允许在表单域中输入千位分隔符,设置USE_THOUSAND_SEPARATOR=True在您的 settings.py 文件中。如果在 en-us 语言环境中,用户将能够输入数字 1,000.231000.23 来表示相同的数字。在 de-de 语言环境中,这将允许输入一个点作为千位分隔符。

默认的 Django 语言环境是 en-us。如果你还想支持其他语言环境和根据语言环境输入不同的数字格式,你必须添加 django.middleware.locale.LocaleMiddleware 到你的 MIDDLEWARE_CLASSES。此中间件将查看 HTTP Accept-Language 请求 header 并根据每个请求设置区域设置,允许您的用户在他们自己的区域设置中输入数字,而无需您对你的代码。

顺便说一句,如果您的 decimal 字段没有出现错误,那么很可能您的 View 代码也有问题。例如,可能创建了表单,但由于错误的代码路径,未调用 is_valid()。生成的 POSTed 表单将只呈现一个没有附加错误列表的表单。

关于django - 如何让用户输入逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com