2016-07-28 7 views
2

create機能がモデル仕様に従って検証されない場合がありますか?Djangoは作成時に検証しませんか?

class Contact(models.Model): 
    id = models.AutoField(primary_key=True) 

    firstname = models.CharField(max_length=100, null=False, blank=False) 
    lastname = models.CharField(max_length=100, null=False, blank=False) 
    email = models.EmailField(max_length=150, blank=False, null=False) 
    active = models.BooleanField(default=True) 

そして、私は私のviewでこの機能を使用します:ここに私のモデルです

new_contact = Contact.objects.create(firstname=a, 
    lastname=b, 
    email=c) 
# where a, b, & c are empty strings in request.POST, which shouldn't validate 

createへの呼び出しは問題なく通り抜けます。しかし、そうではないはずです。モデルは、必要に応じてこれらのフィールドを指定します。実際に、私が管理パネルに行ってこのオブジェクトを見ると、私はフィールドが必要であることを私に叫ぶので、(変更を加えることなく)保存することはできません。

createは有効ではありませんか?

どうすれば検証することができますか?

+0

@ e4c5はい、フォームを作成しましたが、それでも問題は解決しませんでした。この時点で、私はただ一つのビューでいくつかのフォームを受け入れています。作成したメインモデルに補助情報を追加するだけで、ユーザーはページの更新を強制されますが、私は好きではありません。 – smilebomb

答えて

0

フォームとモデルを混在させています。

Field.blank

Trueの場合、フィールドは空白に許可されています。デフォルトはFalseです。

これはnullと異なることに注意してください。 nullは純粋に データベース関連ですが、空白は検証に関連しています。フィールドに のblank = Trueが指定されている場合、フォームの検証によって空の値が入力されます。 フィールドに空白=偽がある場合は、フィールドが必要です。

はい、モデルがブランクの検証で気にならないのは正常な動作です。

空白のユーザー入力がデータベースに格納されないようにするには、ModelFormを使用する必要があります。これは、ほとんどのDjangoがリクエストを直接使用するのと同じです.POST

+0

修正。このオブジェクトが作成されるのは私の状況で、送信されるメインフォームとは非同期であり、条件付きでのみ要求されます。私はこのモデルのために定義されたフォームを持っていません。 – smilebomb

+0

あなたが今作成しなければならないか、 – e4c5

0

Djangoのdocから、モデル検証に関連するメソッド、つまりfull_clean, cleanを明示的に呼び出す必要があります。

Django documentationの例を参考にして、モデルに独自の検証シーケンスを実装することができます。

関連する問題