简体   繁体   English

十进制字段限制的Django客户端验证

[英]Django client side validation on decimal field limit

I wanted to limit django model decimal field to 4 places in client side itself meaning field should not allow user to enter more than 4 digits. 我想将django模型的十进制字段在客户端本身限制为4个位,这意味着该字段不应允许用户输入超过4位数字。

I tried below code but its get validate only after save but i need to limit while user entering digits. 我尝试了下面的代码,但仅在保存后才进行验证,但我需要在用户输入数字时进行限制。

unit_price = models.DecimalField(db_column='UNIT_PRICE', max_digits=4, decimal_places=2)

Have you tried using a widget in your Form definition? 您是否尝试过在表单定义中使用小部件?

unit_price = forms.DecimalField(
    widget=forms.NumberInput(attrs={'step': '0.01', 'min': '0.00', 'max': '99.99' }))

You have to use a little javascript to restrict the user from entering more than 4 digits use the below snippet in forms and javascript files 您必须使用一些javascript来限制用户输入4位以上的数字,并在表单和javascript文件中使用以下代码段

forms 形式

unit_price = forms.DecimalField(
    widget=forms.NumberInput(attrs={'step': '0.01', 'min': '0.00', 'max': '99.99', onkeypress: 'return isValid(event)'}))

javascript javascript

function isValid(event) {
  var val = document.getElementById('test').value;
  val = val.split('.').join('');
  event = (event) ? event : window.event;
  var charCode = (event.which) ? event.which : event.keyCode;
  if (val.length < 4 || charCode == 8 || charCode == 37 || charCode == 39 || charCode == 46){
     return true;
  }
  else {
     return false;
  }
}

By this way, the user input can be restricted to 4 places on keypress too 通过这种方式,用户输入也可以限制在按键上的4个位置

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM