1

Django管理モデルにIntegerFieldがあり、「2100」ではなく「2,100」と入力すると、Djangoが「整数を入力してください」と文句を言うことがあります。カンマやドル記号などを削除できるメソッドをオーバーライドして、ユーザーが直感的に理解できるように、数値を整数として正しく解析できるようにすることはできますか?clean()とclean_fields()を試しましたが、間違って使用しない限り、これらは私が望むものではないようです。ありがとう!

4

1 に答える 1

2

djangoの組み込みバージョンの場合は、独自のカスタム整数フィールドを作成して、その場所で使用するのはどうでしょうか。詳細については、ドキュメントを参照してください。組み込みのをオーバーライドしてから、独自のFormFieldを作成することをお勧めIntegerFieldします。

オーバーライドしModelFormたときに失敗するのは、モデルの検証であると思われます。フォームの検証は、モデルの検証の前に開始されます。clean()clean_fields()

次のようなものを試してください。

from django.db import models
from django.forms import fields

class IntegerPriceFormField(fields.IntegerField):
    def to_python(self, value):
        if isinstance(value, basestring):
            value = value.replace(",", "").replace("$", "")
        return super(IntegerPriceFormField, self).to_python(value)

class IntegerPriceField(models.IntegerField):
    def formfield(self, **kwargs):
        defaults = {'form_class': IntegerPriceFormField}
        defaults.update(kwargs)
        return super(IntegerPriceField, self).formfield(**defaults)

次に、モデル定義でIntegerFieldの代わりにIntegerPriceFieldを使用できます。

于 2013-03-08T22:25:31.997 に答える