2012-07-05 41 views
38

我想实现一个待办事项列表网站来练习使用Django。在models.py中,我有一个名为Item的类来表示待办事项。在这里面,我有以下行:如何使Django的DateTimeField可选?

due_date = models.DateTimeField(required=False) 

DUE_DATE意味着是一个可选字段的情况下,用户对一些待完成项目的最后期限。问题是由于意外的关键字参数'required',上面的代码给了我一个TypeError。

因此,我似乎无法使用DateTimeField的关键字参数'required'。有什么办法可以让DateTimeField成为可选的吗?或者是否有针对我遇到的问题的标准实施?

+4

'required'仅用于*表单*字段。模型字段使用'blank = True',为了允许为数据库中的列存储NULL值,它必须与'null = True'结合使用。否则,你会得到一个'IntegrityError'。 – 2012-07-05 20:07:21

回答

63

“required”是Django表单的有效参数。对于模型,您需要关键字args blank=True(用于管理员)和null=True(用于数据库)。

+1

啊,所以我得到形式和模型混合起来。哎呀。 – 2012-07-05 20:07:09

+1

感谢您解释'required','blank'和'null'之间的区别。 – aero 2016-08-22 21:48:18

+0

IIRC'blank = True,null = True'不推荐用于文本字段,因为那样你可以有两个“空”:''''和'NULL',但是这不适用于日期型字段吗? – 2017-12-14 17:53:28

21

使用 due_date = models.DateTimeField(null=True, blank=True)

检查Field Options以获取更多信息。

+0

我们是否需要添加'required = False',或者这两个是否足够?如果我们添加或不添加任何差异? – jeff 2016-10-26 13:31:52

+1

@halilpazarlama在你的模型字段中你不需要'required = False',而且它在模型字段定义中甚至不是有效的关键字参数。 'required = *'可以在表单字段中使用,如果在模型字段定义中已经有'blank = True',则仍然不需要。 – machaku 2016-10-27 07:22:31

+0

哦。我应该更彻底地阅读其他答案。谢谢,虽然:) – jeff 2016-10-28 01:32:53