2017-12-20 2 views
0

Djangoのドキュメントがあることを示していますか私はいくつかのモデルを作成するための入力CSVファイルを解析するルーチンを持っている、と私は使用してオブジェクトを作成したとして、過長Nameフィールドには、道に沿ってではありました:MAX_LENGTH

new_standard = Standard.objects.create(Name=lname,ShortName=sname,calcmethod=method,Description=descr,course=course,Order=stdnum) 
new_standard.save() 

エラーが唯一のように、後に提起されましたユーザーはフォームを使用してオブジェクトを編集しようとしました(これは検証されません)。オブジェクトを作成するために同じフォームを使用する場合、入力フィールドは30番目の文字を超えて入力することはできませんが、私の手動の方法では、長さの長いフィールドを作成できるようです。

フィールドの長さをチェックした後に手作業で文字列を切り捨てるのではなく、フォームやDBで扱えるように見えますが、これは避けてください。 DBにこれらの時限爆弾のいくつかがあるので、それらを取り除く最も簡単な方法は何ですか?

答えて

1

歴史的な理由から、Django検証はオブジェクトの作成や保存時には呼び出されませんが、Django管理者を含むモデルフォームによってトリガーされます。

は手動max_lengthはSQLiteのによって強制されていないことをfull_clean()

from django.core.exceptions import ValidationError 

new_standard = Standard(Name=lname,ShortName=sname,calcmethod=method,Description=descr,course=course,Order=stdnum) 
try: 
    new_standard.full_clean() 
except ValidationError as exp: 
    # Do something here 
    pass 
else: 
    save() 

注意を呼び出すことによって、検証を引き起こす可能性があります。別のデータベースを使用していた場合、長すぎる文字列を保存しようとすると、整合性エラーが発生します。

+0

私はこれらのフィールドを切り捨てるコードを書く必要がありますが、それは正しいでしょうか?さまざまなDBの動作に関する情報もありがとう。 – DeltaG

+0

はい、フィールドを切り捨てるコードを記述する必要があります。 – Alasdair

関連する問題