バックグラウンド
空白に設定された 2 つのフィールドを持つモデルがあります。
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
問題は、フォームの作成時に動的に設定したいmax_length
ので、カスタムフォームを持っていることです:
class NewsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewsForm, self).__init__(*args, **kwargs)
title_max_length = 20
info_max_length = 100
self.fields["title"] = forms.CharField(max_length = title_max_length)
self.fields["info"] = forms.CharField(
widget = forms.Textarea,
validators = [
MaxLengthValidator(info_max_length)
]
)
注: これら 2 つの長さの値は実際にはデータベースから取得されますが、例を短くするためにそのコードを含めないことにしました。
問題
これらのカスタム フィールドを使用すると、blank
オプションが上書き/無視されます。
次のように、max_length、widget、バリデーターを既存のフィールドに追加してみました。
class NewsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewsForm, self).__init__(*args, **kwargs)
title_max_length = 20
info_max_length = 100
self.fields["title"].max_length = title_max_length
self.fields["info"].widget = forms.Textarea
self.fields["info"].validators = [MaxLengthValidator(info_max_length)]
これを行うと、blank
オプションは機能しますが、動的 max_length はフォームに適用されません。
django のソースを調べてみましたが、私はかなり新しいので、今は多すぎて取り入れられません。
これを達成する方法はありますか?