我在Django文档中执行民意调查应用程序:Writing your first Django app, part 2。使用Database API时,我发现了IntegrityError。
轮询/ models.py
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published')
我试图创建一个问题模型的对象。
Question.objects.create(question_text="What's up?")
这会产生错误
IntegrityError:NOT NULL约束失败:polls_question.pub_date
但是当我尝试这个时
Question.objects.create(pub_date=timezone.now())
它成功创建了一个对象。
第一种情况下IntegrityError的原因是什么?为什么它在第二种情况下不会产生任何错误?
答案 0 :(得分:2)
来自django doc
避免在基于字符串的字段(如CharField和TextField)上使用null。如果基于字符串的字段具有null = True,则表示它具有“无数据”的两个可能值:NULL和空字符串。在大多数情况下,为“无数据”提供两个可能的值是多余的; Django约定是使用空字符串,而不是NULL。
{
"data": [
{"densityId":"11","densityDescription":"Mcvr"},
{"densityId":"14","densityDescription":"test"}
]
}
(默认),django将使用空字符串(表示不是
NULL)null=False
,字段可以写null=True
(意味着NULL
来到python) 所以简而言之:
Django不会为None
和IntegrityError: NOT NULL constraint
提出CharField
。
答案 1 :(得分:0)
更改您的型号代码,如下所示
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published', auto_now_add=True)
现在尝试查询它将起作用
Question.objects.create(question_text="What's up?")
原因:
您正尝试使用单个值question_text
创建问题对象,但pub_date
也是必填字段。但你没有提供它。
即使您没有提供auto_now_add
值,pub_date
也会自动提供当前日期时间。
IntegrityError
。