如果我尝试在Django 1.10中保存不完整的模型实例,我会期望Django引发错误。情况似乎并非如此。
models.py:
from django.db import models
class Essai(models.Model):
ch1 = models.CharField(max_length=100, blank=False)
ch2 = models.CharField(max_length=100, blank=False)
所以我有两个字段不允许为空(默认行为,Django在MySQL表创建时应用NOT NULL
限制。我希望Django在存储之前没有设置其中一个字段时会出错。
但是,当我创建一个不完整的实例时,数据存储得很好:
>>> from test.models import Essai
>>> bouh = Essai()
>>> bouh.ch1 = "some content for ch1"
>>> bouh.save()
>>> bouh.id
9
>>> bouh.ch1
'some content for ch1'
>>> bouh.ch2
''
>>>
我原本以为Django会引发错误。但是,如果我强制ch2
到None
,则会引发错误:
>>> bouh = Essai()
>>> bouh.ch1 = "some content for ch1"
>>> bouh.ch2 = None
>>> bouh.save()
Traceback (most recent call last):
(...)
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: test_essai.ch2
>>> bouh.id
>>> bouh.ch1
'some content for ch1'
>>> bouh.ch2
>>>
这是正常行为吗?我错过了什么?为什么Django在这个简单的情况下不会将错误引发为默认行为?
谢谢你的灯!
EDIT
我得到了一些回复,指出在SQL中空字符串""
不等于NULL,如Django model blank=False does not work?中所述
但是,如果我们查看ModelForm行为,则django doc似乎存在不一致。
答案 0 :(得分:-1)
使用此,
from django.db import models
class Essai(models.Model):
ch1 = models.CharField(max_length=100)
ch2 = models.CharField(max_length=100)