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
相关产品推荐
相关产品推荐

