10

Django モデルフォームを使用しているときに、数値のみの整数フィールドがあります。しかし、ブラウザでは、「文字」を入力できるテキスト フィールドとして表示されます。これを「数値」だけにしたい。これを行う方法 ?つまり、ユーザーは数字のみを入力できる必要があります

フィールドの属性を設定することで、1 つの方法でそれを行うことができます。

1)

def __init__(self,*args,**kwargs):

        super(PropertyForm,self).__init__(*args, **kwargs)        
        self.fields['brokers_phone_number'].widget.attrs['type'] = "number"

これはうまくいかないようです。私はhtml 5を使用しており、ブラウザはChromeです。私は何を間違っていますか?どうすればもっとうまくできますか?

4

5 に答える 5

19

Django 1.6 には NumberInput ウィジェットがありますが、1.6 は現在安定していません。

しかし、次のようなことを試すことができます:

from django.forms import ModelForm, CharField, TextInput

class PropertyForm(ModelForm):

    brokers_phone_number = CharField( widget=TextInput(attrs={'type':'number'}))

    class Meta:
     ...
于 2013-09-26T09:33:35.257 に答える
3

最終的に、jQuery ベースのソリューションを使用することになりました。 ここで質問します。タイプを追加する代わりに、クラス「番号」を追加し、それにjquery番号検証を追加しました。しかし、これは、特に html 5 の "number" が配置されている場合は、ハックなソリューションです。誰かがこれを行う方法を見つけたら、答えてください。

形式:

 def __init__(self,*args,**kwargs):
    super( PropertyFloorForm, self).__init__(*args, **kwargs)
    self.fields['number_of_units'].widget.attrs['class'] = "number"

テンプレートでは

$(document).ready(function() {
    $(".number").keydown(function(event) {
        // Allow: backspace, delete, tab, escape, and enter
        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
            // Allow: Ctrl+A
            (event.keyCode == 65 && event.ctrlKey === true) ||
            // Allow: home, end, left, right
            (event.keyCode >= 35 && event.keyCode <= 39)) {
            // let it happen, don't do anything
            return;
        } else {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                event.preventDefault();
            }
        }
    });
});
于 2013-09-26T09:19:12.830 に答える
2

別の解決策は次のとおりです。

  • モデル ファイルにバリデータを追加する
  • モデル フォームのフィールドに css クラスを追加する
  • ドキュメント/ページの読み込み時にjqueryを使用して、上記のクラスのタイプを「数値」に変更します

モデル内:

    exp_from = models.IntegerField(default=0,
        validators=[
            MaxValueValidator(100),
            MinValueValidator(0)
        ])

    exp_to = models.IntegerField(default=1,
        validators=[
            MaxValueValidator(100),
            MinValueValidator(1)
        ])

モデル形式で - jquery クラスを追加する

self.fields['exp_from'].widget.attrs['class'] = "text_type_number"
self.fields['exp_to'].widget.attrs['class'] = "text_type_number"

HTMLファイル/JSファイル内

$(document).ready(function(){
   $('.text_type_number').attr('type', 'number');
});
于 2013-10-29T06:13:46.467 に答える