に空の文字列を許可しませんデフォルト。しかし、私の場合、私はxmlを解析し、そのようにモデルを作成しているので、私は全くフォームを使用していません。は、だから私は、次の属性を持つ本モデルを持つモデル属性
私は、空の文字列を許可しない設定ができますか、モデルフィールドを書き込むか、パーサーを調整する必要があるのでしょうか?
に空の文字列を許可しませんデフォルト。しかし、私の場合、私はxmlを解析し、そのようにモデルを作成しているので、私は全くフォームを使用していません。は、だから私は、次の属性を持つ本モデルを持つモデル属性
私は、空の文字列を許可しない設定ができますか、モデルフィールドを書き込むか、パーサーを調整する必要があるのでしょうか?
のModelFormを返すようあなたはまだ、データを検証し、モデルオブジェクトを作成するためのフォームを使用することができますなしに空の文字列であること作成するオブジェクト。私はその方法論を.xlsファイルからモデルへのバッチ更新を行う際に使用しました。
このようにフォームを使用すると、何がうまくいかなかったか、他のプロセスを開始するなど、エラーをログに記録することができます。
また、データベースを手作業で編集する必要がなくなり、文字列が空の場合でもフォームがデフォルト値にプラグインされる可能性があります。
あなたを助ける希望。
MySQLでは制約のサポートが制限されているため、トリガー(see here for more about how to use trigger)を使用するか、パーサーを調整する必要があります。
フィールド値としてNULLを持たなくても問題ないとすれば、モデルフィールドをnull=False
に設定することができます(nullは純粋にデータベースに関連しますが、空白は検証に関連します)。そして、
if not variable:
variable = None
この前のSOの質問にも役に立つかもしれません: I'm looking for a constraint to prevent the insert of an empty string in MySQL
は[OK]を、ので、これは古い問題であり、DjangoのORM /モデル層はこれが頼まれた時にサポートを持っていなかったことは可能ですが、モデルのためのkwarg、あなたが望むものを正確に行いblank
があります:
class MyModel(models.Model):
text = models.CharField(max_length=255, null=False, blank=False)
私は現在上記を使用しており、うまくいきます。私は、入力を事前に検証するというBrandonの答えは良いアイデアであり、このdb contraintでさえも行うべきであると指摘しておきます。私はちょうど余分なパラノイドであり、これは空白のテキスト値を持っています(私はおそらく、プログラマのエラーのために私は値なしで提出することができないので起こるだろうと思う)いくつかのものを壊してUIを完全に混乱させるだろう私はそれらを許可しません!
将来、誰かがこの投稿を遭遇したら、これが表示されることを願っています。
これは正しくありません。 'blank'と' null'はデフォルトで両方とも 'False'なので、' title = models.CharField(max_length = 250) 'と同じです。 – YPCrumble
Djangoモデルのデフォルトはフォームの検証に適用されるblank=False
とnull=False
です。つまり、データベースにNULL
を含めることはできません。フォームを使用してモデルインスタンスをインスタンス化しないと、これらのどちらもデータベースに空の文字列を保存できなくなります。
フォームを使用せずにこれを行う良い方法(例:、あなたは)create
またはget_or_create
を使用してクラスをインスタンス化しようとしている場合override the model's clean
method and call full_clean
in the save
methodにある:あなたのケースでは
from django.core.exceptions import ValidationError
def clean(self):
if self.title == "":
raise ValidationError("Database should not contain an empty string title!")
def save(self):
self.full_clean()
super(YourModel, self).save(*args, **kwargs)
あなたはおそらく同様にsave
機能にあなたの検証を置くことができます。 clean
メソッドをオーバーライドし、保存メソッドでfull_clean
を呼び出す利点は、フォームnon_field_errors
にValidationError
が追加されることです。
フォームを使用してデータを検証し、モデルオブジェクトを作成することはできます。私は.xlsファイルを解析するときにその方法論を使用しました。フォームを使用すると、エラーをログに記録することもできます。 – Brandon
それはあなたがそれから答えを出すべき素晴らしいヒントです。 – Pickels
ありがとうございます。私はそれを答えとして加えました。 – Brandon