2013-05-06 11 views
5

背景

私は空白に設定されている2つのフィールドを持つモデルがあります:django.forms.CharFieldに「空白」がありませんが、django.db.models.CharFieldにはなぜ存在しますか?

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、ウィジェットとバリデータを追加してみました:

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は、フォームに適用されていません。

私はジャンゴソースを調べようとしましたが、私はかなり新しくなっていますので、今すぐ取り入れるのは大変です。

これを実現する方法はありますか?

+2

フォームにrequired = Falseパラメータを追加しようとしましたか? –

+0

@AlagappanRamu:いいえ、私はしませんでした。私は非常に "空白"は、私はほとんどのドキュメントでそれを逃した探しに焦点を当てていた。 'CharField'の作成に' required = False'を追加して問題を解決しました。私はそれを受け入れてupvoteことができるように答えとしてあなたのコメントを書く。ありがとうございました! – rzetterberg

+0

回答として追加されました!ありがとう。 –

答えて

12

フォームを作成し、MAX_LENGTH、ウィジェットとバリデータから離れてCharFieldですに次のパラメータを追加しますジャンゴで

forms.CharField(...,required = False) 

を、空白=モデルで真のフォームで必要= Falseに相関します。

+0

Django 1.11で私のために働いていない、まだdjango adminで質問しますサーバの再起動後に動作します(通常、自動再読み込みします) –

関連する問題