You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Django REST API时如何将模型的DateTime字段设为可选

Django模型DateTime类型字段设置为可选的解决方案

在Django框架中,字段需要同时配置null=True和blank=True才能实现全链路可选:

  • null=True:数据库层面允许该字段存储NULL值
  • blank=True:表单校验、DRF序列化器校验层面允许该字段不传入值

你的createdTime、updateTime两个DateTime字段都定义在基类IbaseEntity中,直接修改基类对应字段的配置即可,子类employee会自动继承基类的字段属性,无需额外修改子类代码。

修改后的完整模型代码

class IbaseEntity(models.Model):
    usrStatus = models.BooleanField()
    # 给DateTime字段添加可选配置
    createdTime = models.DateTimeField(null=True, blank=True)
    createdUserID = models.IntegerField(max_length=20)
    updateTime = models.DateTimeField(null=True, blank=True)
    updateUserID = models.IntegerField(max_length=20)

    # 建议添加该Meta配置,把IbaseEntity设为抽象基类,不会单独生成数据库表
    class Meta:
        abstract = True

class employee(IbaseEntity, models.Model):
    emp_id = models.IntegerField(max_length=20, primary_key=True)
    emp_name = models.CharField(max_length=20)
    emp_surname = models.CharField(max_length=20)
    def __str__(self):
        return self.emp_name

额外优化建议

如果你的createdTime是记录对象创建时间、updateTime是记录对象最后更新时间,不需要手动赋值的话,可以额外加自动填充参数,不需要前端/业务代码传值就能自动生成:

  • createdTime添加auto_now_add=True:创建对象时自动写入当前时间,后续不会再变更
  • updateTime添加auto_now=True:每次对象更新时自动写入当前时间

配置示例:

createdTime = models.DateTimeField(null=True, blank=True, auto_now_add=True)
updateTime = models.DateTimeField(null=True, blank=True, auto_now=True)

修改完成后执行python manage.py makemigrations和python manage.py migrate同步修改到数据库即可。

内容的提问来源于stack exchange,提问作者Kiddanube4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:48:02