0

モデルとフォームの検証についていくつか質問があります。これらについて私を助けてもらえますか:


検証はどこで行う必要がありますか? モデルまたはフォームにある必要がありますか? これを行う正しい方法は、フォームにバリデーターを、モードに制約を設定することですか?


フォームに「clean_」メソッドを書くこととバリデータを書くことの違いは何ですか? 「clean_」メソッドに検証チェックを入れる人が多いのを見てきました。


私が処理しているリクエストでは、URL 文字列に「alive」というパラメーターがあります。これは通常 1 または 0 です。フォームでこれを定義する正しい方法は何ですか? それが数値であり、1 または 0 のみであることを検証する必要があります。これは正しい方法ですか?

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

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

クライアント側にフォームがありません。JS POST リクエストを検証するために Django フォームを使用しています。


モデル フィールドの 1 つで、画面解像度を 1234x4321 の形式で保存する必要があります。モデルとフォームの両方CharFieldに正規表現の検証を追加するとしてこれを宣言する必要がありますか? 正規表現の検証の例は役に立ちます。


ありがとう。

4

1 に答える 1

1

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

フィールドのデフォルト値は、そのコンストラクターで渡す必要があります。

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

あなたの場合、取得できる値が0と1のみの場合は、BooleanField代わりにaを使用するのが理にかなっているように見えます(その場合、デフォルトは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)
于 2011-07-01T10:29:26.293 に答える