model有几个保留字段,分别是:create_time
、update_time
、create_user
、update_user
、project
、is_deleted
为保留字段
create_time: 创建时间,会自动获取数据创建时的时间并填充
update_time: 更新时间,会自动获取数据更新时的时间并填充
create_user: 创建用户,新建数据时会自动获取提交数据的用户填充
update_user: 更新用户,更新数据时会自动获取更新数据的用户填充
project: 所属项目,当project存在时,默认会按照项目进行数据检索与处理
is_deleted: 逻辑删除,判断这条数据是否被删除,如果model中有is_deleted
字段存在,则在QuerySet获取数据时会自动过滤掉已删除的数据,也就是.filter(is_deleted=False)
以Template
为例
class Template(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
create_user = models.ForeignKey(User, on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='创建用户')
project = models.ForeignKey(Project, on_delete=models.PROTECT, db_constraint=False, verbose_name='所属项目')
name = models.CharField(max_length=128, unique=True, verbose_name='名称')
description = models.TextField(null=True, verbose_name='描述')
is_deleted = models.BooleanField(default=False, verbose_name='已删除')
def __str__(self):
return self.name
其中:create_time
、update_time
、create_user
、project
、is_deleted
为保留字段,在数据的增删改查中无需过多关注,系统会自动处理
model中有一个保留函数:to_dict
,将model转成字典,当model中有to_dict
函数存在时,在QuerySet取数据时默认会按照to_dict
定义好的格式生成最终的json数据,否则的话会按照model字段自动生成
以TempTask
为例
class TempTask(models.Model):
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
template = models.ForeignKey(Template, on_delete=models.PROTECT, db_constraint=False)
subtask = models.ForeignKey(SubTask, on_delete=models.PROTECT, db_constraint=False)
sortnum = models.SmallIntegerField(default=37, verbose_name='排序ID')
exechost = models.CharField(max_length=64, default='localhost', verbose_name='执行主机')
execuser = models.ForeignKey(ExecUser, null=True, on_delete=models.PROTECT, db_constraint=False)
def to_dict(self):
return {
'id': self.id,
'template': self.template.name,
'template_id': self.template.id,
'subtask': self.subtask.name,
'subtask_id': self.subtask.id,
'subtask_rcmd': self.subtask.rcmd,
'subtask_args': self.subtask.args if self.subtask.args else '',
'sortnum': self.sortnum,
'exechost': self.exechost,
'execuser': self.execuser.name if self.execuser else ''
}
最终返回的数据中将会额外包含template_id,subtask_id,subtask_rcmd,subtask_args四个TempTask原本并不包含的字段