web-dev-qa-db-ja.com

djangoでカスタムフォームフィールドを作成する方法についてのチュートリアル?

カスタムモデルフィールドではなく、Djangoのカスタムフォームフィールドを説明する良い記事はありますか?グーグルで何も見つかりませんでした。

24
Mert Nuhoglu

フォームフィールドは簡単にカスタマイズできます。

class UpperCaseField(forms.CharField):
    def clean(self, value)
        try:
            return value.upper()
        except:
            raise ValidationError

基本的には、必要なものに最も類似しているフィールドから継承するクラスを作成してから、clean()メソッドを書き直して、必要な値を返すようにします。別の例を次に示します。

class MyObjectField(forms.ModelChoiceField):
    # in this case, 'value' is a string representing
    # the primary key of a MyObject
    def clean(self, value):
        try:
            return MyObject.objects.get(pk=value)
        except:
            raise ValidationError

custom widgets一方、もう少し便利ですが、スムーズに動作するように作成する必要のあるメソッドがいくつかあるため、実行するのが少し難しくなります。

32
priestc

オープンソースコードの場合と同様に、ソース自体を読むことで多くのことを学ぶことができます。 Django.forms.fieldsモジュールを参照して、すべての異なるフォームフィールドがどのように定義されているかを確認してください。それらのほとんどはすでに他のサブクラスであるため、それを複製して必要なものを変更できます。

16
Daniel Roseman

これはチュートリアルではありませんが、Djangoのドキュメントではこれについて少し説明しています。

組み込みのFieldクラスがニーズを満たさない場合は、カスタムFieldクラスを簡単に作成できます。これを行うには、Django.forms.Fieldのサブクラスを作成するだけです。その唯一の要件は、clean()メソッドを実装し、その__init__()メソッドが上記のコア引数(required、label、initial、widget、help_text)を受け入れることです。

Cleanメソッドについて読んで、例を見ることができます Django docs で。繰り返しますが、チュートリアルではありませんが、便利です。

フォームフィールドをオーバーライドする Django-extensions など、利用可能なDjangoアプリプロジェクトのいくつかのコードを読むことで、多くのことを学んでいることがわかりました。とは良い学習ツールです(少なくとも私にとっては)。これはあなたが始めるのに役立ちます。

6
thornomad