0

モデルとフォームのバリデーションに関していくつか質問があります。モデルとフォームの検証に関するヘルプ


ここで検証を行う必要がありますか?それはモデルかフォームか?これについて正しい方法は、モードでフォームと制約のバリデータを持つことですか?


フォームに 'clean_'メソッドを記述してバリデーターを書くのと違う点は何ですか?私は、人々がしばしば 'clean_'メソッドでバリデーションチェックを入れることを見てきました。


私が処理しているリクエストでは、「生きている」というURL文字列にparamがあります。これは一般的に1または0です。私のフォームでこれを定義する正しい方法は何でしょうか?私はそれが数字であることを検証する必要があり、1または0にしかなりません。これは正しい方法ですか?

alive = models.IntegerField(null=False, max_value=1, min_value=0) 

このフィールドのデフォルト値を定義する方法、つまりこのパラメータが渡されない場合、デフォルトは0(False)です。

私はクライアント側にフォームを持っていません。私はDjangoフォームを使って私のJS POST要求を検証しています。


モデルフィールドの1つでは、画面の解像度を1234x4321の形式で保存する必要があります。私はこれをCharFieldとして宣言する必要がありますで正規表現のバリデーションを追加するモデルとフォーム?正規表現検証の例は参考になります。


ありがとうございます。

答えて

1

検証は、モデルではなくフォームで行う必要があります。しかし、ModelFormsを使用している場合は、通常、モデル自体(データベースに固有のもの(maximum_fieldの長さ、データベースのフィールドのタイプなど)から検証ルールの一部を継承します。空白のまま)。

form = SomeForm(initial={'alive' : 0}) 

あなたのケースではあるが、得られる値のみを0と1であれば、それは意味をなすであろうと思わ:

フィールドのデフォルト値は、コンストラクタに渡す必要があります代わりにBooleanFieldを使用してください(この場合はデフォルトでfalseになります)。

解像度の場合、私は可能な解像度といくつかの任意の値の間のマッピングを作成します。

RESOLUTIONS = (            
     ("1","800x600"), 
     ("2","1024x768"),        
     .....       
) 

と、モデルにそれを渡す:ユーザーは、対応するオプションと値を選択フィールドを取得するようにするため

resolutions = models.CharField(RESOLUTIONS, max_length=1) 

。 一方、ユーザーが自分自身を挿入する必要がある場合は、2つのフィールド(1つは幅、もう1つは高さ)を使用すると、ユーザー入力を検証するよりはるかに簡単です。

ですから、モデルのメソッドを定義することができます

def get_resolution(self): 
    return "%sx%s" % (self.width, self.height) 
+0

こんにちはUkuを、私はので、私たちの場合、我々の組み合わせの多くのXXXXXXXXX形式で解像度を保存したいと思います。あなたがこれを実装するために必要なバリデーションと制約の種類を私に教えてくれますか?ありがとう。 –

+0

さて、物事を複雑にする必要はありません。異なるフィールドに保存してください。一つは高さ用、もう一つは幅用です。 –

+0

ちょっとウクウ、そうだよ。別のもの:私はJSリクエストを受け取り、データをたくさんのモデルに格納するDjangoアプリケーションを持っています。これを投稿するクライアントフォームはありません。それは物を計算し、場面の背後で要求をするJSです。必要とされるもの - 要求全体に対して1つのフォームを作成し、フォームのsaveメソッドをオーバーライドし、それぞれのモデルにデータを保存するロジックを追加するdirector - または - データが必要とする各モデルの個別ModelFormsを作成する救われますか? –