カスタムモデルフィールドではなく、Djangoのカスタムフォームフィールドを説明する良い記事はありますか?グーグルで何も見つかりませんでした。
フォームフィールドは簡単にカスタマイズできます。
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一方、もう少し便利ですが、スムーズに動作するように作成する必要のあるメソッドがいくつかあるため、実行するのが少し難しくなります。
オープンソースコードの場合と同様に、ソース自体を読むことで多くのことを学ぶことができます。 Django.forms.fields
モジュールを参照して、すべての異なるフォームフィールドがどのように定義されているかを確認してください。それらのほとんどはすでに他のサブクラスであるため、それを複製して必要なものを変更できます。
これはチュートリアルではありませんが、Djangoのドキュメントではこれについて少し説明しています。
組み込みのFieldクラスがニーズを満たさない場合は、カスタムFieldクラスを簡単に作成できます。これを行うには、Django.forms.Fieldのサブクラスを作成するだけです。その唯一の要件は、clean()メソッドを実装し、その
__init__()
メソッドが上記のコア引数(required、label、initial、widget、help_text)を受け入れることです。
Cleanメソッドについて読んで、例を見ることができます Django docs で。繰り返しますが、チュートリアルではありませんが、便利です。
フォームフィールドをオーバーライドする Django-extensions など、利用可能なDjangoアプリプロジェクトのいくつかのコードを読むことで、多くのことを学んでいることがわかりました。とは良い学習ツールです(少なくとも私にとっては)。これはあなたが始めるのに役立ちます。