[英]Followup : missing required Charfield in django Modelform is saved as empty string and do not raise an error
[英]missing required Charfield in django is saved as empty string and do not raise an error
如果我尝试在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模型中所述blank = False无效吗? 但是,如果我们看一下ModelForm的行为,django doc中似乎存在不一致的地方。
用这个,
from django.db import models
class Essai(models.Model):
ch1 = models.CharField(max_length=100)
ch2 = models.CharField(max_length=100)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.