19

選択肢が限られているフィールドを作成しようとしています:

Action_Types=(
              ('0','foo'),
              ('1','bar'),
              )

class Foo(models.Model):
    myAction=models.CharField(max_length=1,choices=Action_Types)

    def __unicode__(self):
        return '%d %s'%(self.pk,self.myAction)

ただし、ルールに違反するコンテンツを挿入しようとすると、エラーや警告メッセージなしで成功しました (「manage.py シェル」を使用)。このフィールドには、任意の長さのテキストを入力できるようです。バックエンドとして SQLite3 を使用しています。

そんなはずじゃないの?または、何かを逃した場合は?

4

1 に答える 1

35

SQLite は VARCHAR の長さを強制しません。

SQLite よくある質問から:

(9) SQLite の VARCHAR の最大サイズは?

SQLite は VARCHAR の長さを強制しません。VARCHAR(10) を宣言すると、SQLite は喜んで 500 文字を入れることができます。また、500 文字すべてがそのまま保持され、切り捨てられることはありません。

django admin または model フォームを使用してデータベースを更新すると、Django が長さの検証を行います。シェルでは、full_clean保存する前に手動で呼び出し、検証エラーをキャッチできます。

f = Foo(myAction="more than 1 char")
try:
    f.full_clean()
    f.save()
except ValidationError as e:
    # Do something based on the errors contained in e.message_dict.
于 2011-12-12T17:13:41.610 に答える