2

次のDjango(1.4)モデルがある場合:

from django.db import models

class SimpleModel(models.Model):
    name = models.CharField(max_length=100)

そして、この簡単なテスト:

from django.test import TestCase
from models import SimpleModel
from django.db import IntegrityError

class SimpleTest(TestCase):
    def test_integrity_error(self):
        with self.assertRaises(IntegrityError):
            m = SimpleModel()
            m.save()

データベースとしてsqlite3データベースが使用されます。ここでテストを実行するとpython manage.py test <appname>、テストはで失敗しAssertionError: IntegrityError not raisedます。

問題は、なぜですか?

私が理解している(または理解しようと思っている)限り、フィールドのデフォルト値はDjangoであるblank=Falseためnull=False、モデルインスタンスをデフォルト値(CharFieldの場合は空の文字列であると思います)で保存することは間違いなく失敗するはずです!では、なぜこれが起こらないのですか?

4

1 に答える 1

6

Djangoは、空CharFieldまたはTextFieldタイプに対してNULLを格納することはありません。空の文字列('')を格納します。そのため、IntegrityErrorforを取得できませんnull=False

に関してはblank=False、それはフォームにのみ影響します。フォームにフィールドを設定させるだけなrequired=Trueので、値がない限り検証されません。データベースや、フォームの外部で空白の値を手動で設定する機能には影響しません。

于 2012-08-07T14:32:08.697 に答える