记录一次 在django框架开发中遇到问题:
想要的逻辑:
当在保存数据时,create_time
字段只会在新建数据时被设置为当前时间,并且之后不会再修改,而modify_time
字段在每次保存数据时都会被设置为当前时间也可以为空,表示最后的修改时间。
当我业务逻辑开发完成后我发现在更新一条数据时该数据的创建时间也随之更新了,
最初的字段设计:
create_time = models.DateTimeField(verbose_name="创建时间", auto_now=True)
modify_time = models.DateTimeField(verbose_name="修改时间", blank=True, null=True)
发现问题后的设计:
create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
modify_time = models.DateTimeField(verbose_name="修改时间", blank=True, null=True)
修改时间也可以设计成如下:
modify_time=models.DateTimeField(auto_now=True)
原因:
auto_now_add
: 当新建一条数据时,该字段会自动设置为当前时间,并且仅在创建时更新一次。auto_now
: 每次保存该数据时,该字段都会被自动设置为当前时间,用于表示最后的修改时间。
models.DateTimeField(verbose_name="修改时间", blank=True, null=True)中的 blank=True, null=True 表示对应的数据库字段允许为空值
-
blank=True
: 当该字段设置为True
时,在创建或修改数据时,该字段可以为空白。也就是说,该字段允许在表单中不填写任何值。在数据库中,空白的值会被保存为NULL
。 -
null=True
: 当该字段设置为True
时,该字段在数据库中可以存储NULL
值,即没有值的情况。
这两个选项可以独立使用,也可以同时使用。它们的使用场景如下:
-
blank=True
和null=True
: 表示该字段在表单中可以为空白,并且在数据库中可以存储NULL
值。适用于允许用户在表单中选择不填写该字段的情况,并且在数据库中该字段可以为空值。 -
blank=True
和null=False
(默认值): 表示该字段在表单中可以为空白,但在数据库中不能存储NULL
值。适用于允许用户在表单中选择不填写该字段的情况,但在数据库中该字段不允许为空值。 -
blank=False
(默认值)和null=True
: 表示该字段在表单中必须填写值,但在数据库中可以存储NULL
值。适用于在表单中要求用户必须填写该字段的情况,但在数据库中该字段允许为空值。 -
blank=False
和null=False
: 表示该字段在表单中必须填写值,并且在数据库中也不能存储NULL
值。适用于在表单中要求用户必须填写该字段,并且在数据库中该字段不能为为空值的情况。