on_delete=None
# 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,
# 删除关联数据,与之关联数据也删除,级联删除
on_delete=models.DO_NOTHING,
# 删除关联数据,什么也不做
on_delete=models.PROTECT,
# 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,
# 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT,
# 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,
# 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
模糊查询
hversion_id = request.GET.get('hversion_id', '')
q = Q()
q.add(Q(managementproject_id__project_name__icontains=project_name), Q.OR)
输入不定参数
default = {}
if hversion_id:
default["hversion_id"] = hversion_id
else:
default = {}
当添加时排除某个参数或者字段
if DirectoryManagement.objects.filter(name=request.data['name'], hversion_id=request.data['hversion_id']).exclude(id=kwargs.get('pk')).exists():
return json_response(msg="已存在相同目录,请更改", code="HPD-DT004")
数据库返回值按照某个参数进行分组
def getdir(self, request, *args, **kwargs):
"""
获取目录结构--json格式
"""
print("获取目录对应的文章内容")
dir_obj = list(DirectoryManagement.objects.annotate(sub_id=F('id')).values('sub_id', 'parent', 'name'))
dir_obj.sort(key=itemgetter('parent'))
data = list()
for parent_id, items in groupby(dir_obj, key=itemgetter('parent')):
item_list = []
for obj in items:
item_list.append(obj)
data.append(dict(parent=parent_id, subdir=list(item_list)))
return json_response(data)
模型:
class HelpVersion(BaseModel):
"""帮助体系版本"""
user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='create_help_version', verbose_name='创建用户')
update_user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='update_help_version', verbose_name='更新用户')
name = models.CharField(max_length=20,null=True, blank=True, verbose_name='版本名称')
create_time = models.DateTimeField(verbose_name="创建时间", default=human_datetime)
update_time = models.DateTimeField(verbose_name="更新时间", default=human_datetime)
class Meta:
db_table = 'help_version'
ordering = ('-id',)
verbose_name = '帮助体系版本'
verbose_name_plural = verbose_name
class DirectoryManagement(BaseModel):
"""帮助体系目录"""
user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='help_dict_user', verbose_name='创建用户')
update_user = models.ForeignKey(Users, on_delete=models.CASCADE, related_name='update_dict_user',
verbose_name='更新用户')
name = models.CharField(max_length=40,null=True, blank=True, verbose_name='目录名称')
hversion = models.ForeignKey(HelpVersion, on_delete=models.CASCADE, verbose_name='帮助体系版本')
parent = models.PositiveIntegerField(default=0, verbose_name="父id")
sorte = models.PositiveIntegerField(default=0, verbose_name="排序")
desc = models.TextField(null=True)
is_show = models.BooleanField(default=True, verbose_name="是否显示")
route_url = models.CharField(max_length=100, null=True, verbose_name="路由地址")
create_time = models.DateTimeField(verbose_name="创建时间", default=human_datetime)
update_time = models.DateTimeField(verbose_name="更新时间", default=human_datetime)
class Meta:
db_table = 'directory_management'
ordering = ('-id',)
verbose_name = '帮助体系目录'
verbose_name_plural = verbose_name
后续持续更新