【问题标题】:Django client side validation on decimal field limitDjango客户端验证十进制字段限制
【发布时间】:2017-05-28 09:52:48
【问题描述】:

我想将 django 模型十进制字段限制为客户端本身的 4 个位置,这意味着字段不应允许用户输入超过 4 个数字。

我尝试了下面的代码,但它只有在保存后才能验证,但我需要在用户输入数字时进行限制。

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

【问题讨论】:

    标签: javascript jquery python django django-models


    【解决方案1】:

    您是否尝试过在表单定义中使用小部件?

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

    【讨论】:

    • 感谢您的回复,将js添加到表单中,我接受了。
    【解决方案2】:

    您必须使用一些 javascript 来限制用户输入超过 4 位数字 在表单和 javascript 文件中使用下面的 sn-p

    表格

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

    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;
      }
    }
    

    通过这种方式,用户输入也可以限制在按键上的4个位置

    【讨论】:

    • 'plus one',效果很好,非常感谢@gowtham 的快速解决方案
    • 但输入4位数字后,我无法删除这些数字。
    • @Sohan 我现在已经更正了答案。您无法删除,因为其他部分条件将在输入 4 位数字后执行,因此请检查键码
    • 感谢编辑。它适用于普通管理表单,但是当我在管理表格行中尝试相同的事情时,JS 代码没有反映,我认为我无法通过正确的“getElementById”,因为它在每一行都不断变化,对吗?在这种情况下我怎样才能达到同样的效果?
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多