电商购物系统首页的商品分类

在这里插入图片描述
如上图对商品的一个分类实际上和省市区的分类十分类似 , 都是通过自关联的方法来实现 , 但是这里不同的是 , 涉及到外键来获取数据

首先让我们来看一下最后通过后端返回数据的形式是什么样子的

"""{1:{channels:[{id:1 , name:手机 , url:},{}{}],sub_cats:[{id:500name:手机通讯,sub_cat:[{id:520 , name:华为},{},……]},{}……]},2:{},3:{},……}"""

也就是说我们需要设置一个大的字典 , 其中第一个键也就是上述的1 , 2 , 3… 这是所有类别的数目 , 也就是下图所展示的部分 , 如id为1所对应的数据保存在channels中的name元素也就是手机相册数码

blog.csdnimg.cn/direct/b4fc8ee8fa1f4d0fbb47b3107318ef42.png)
在我们打开第一个后会展示如下图的页面其中红色框出的就是第二类元素我们将其放在sub_cats这个列表中
在这里插入图片描述
现在的逻辑就很清楚了 , 在这之后我们再嵌套一个列表用来保存第二类数据的子类数据

介绍完之后我们要进行第二步进行实操了

  1. 首先我们要通过channels = GoodsChannel.objects.all()获得商品分组频道的所有数据 , 然后进行循环 , 因为我们使用的是一个自关联的方法所以在拿到第一级数据的时候它的id会重复 – 第一级数据中会包含很多子数据如手机 , 相册 , 数码 , 他们的分组id设置的是相同的

     categories = {}# 查询商品分组频道的所有数据channels = GoodsChannel.objects.all()for channel in channels:group_id = channel.group_idif group_id not in categories:categories[group_id] = {'channels': [], 'sub_cats': []}
    
  2. 在设置好第一级模版之后 , 我们再添加channels中的数据

     # 获得 第一级 主键的数据 , 通过第一级主键获得该类目下的分类category = channel.categorycategories[group_id]['channels'].append({'id' : category.id,'name' : category.name,'url' : channel.url})
    
  3. 在获取第二级第三级数据和之前有一点不相同

    	group = models.ForeignKey(GoodsChannelGroup, verbose_name='频道组名', on_delete=models.CASCADE)category = models.ForeignKey(GoodsCategory, on_delete=models.CASCADE, verbose_name='顶级商品类别')url = models.CharField(max_length=50, verbose_name='频道页面链接')sequence = models.IntegerField(verbose_name='组内顺序')
    

    在商品频道组数据库设置的过程中我们是绑定了两个外键字段category,group

    category是一个自关联的表格 , 通过这个表格我们可以获取到所有的数据

    # subs通过父类别访问子类别 category 该表格设置的是一个自关联的方法 , 通过父类id获得获得表内子类数据category1 = category.subs.all()for re_category in category1:sub_cat = []categories[group_id]['sub_cats'].append({'id': re_category.id,'name': re_category.name,'sub_cat' : sub_cat})category2 = re_category.subs.all()for sub_category in category2:sub_cat.append({'id': sub_category.id,'name': sub_category.name,})context = {'categories':categories}
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/325715.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iphone进入恢复模式怎么退出?分享2种退出办法!

iPhone手机莫名其妙的进入到了恢复模式,或者是某些原因需要手机进入恢复模式,但是之后我们不知道如何退出恢复模式怎么办? 通常iPhone进入恢复模式的常见原因主要是软件问题、系统升级失败、误操作问题等导致。那iphone进入恢复模式怎么退出&…

Hadoop-未授权访问-内置配合命令执行RCE

一、Hadoop常见端口及配置文件 Hadoop中有多种端口,这些端口用于不同的服务和通信。以下是Hadoop中常见的端口以及它们的用途: NameNode Web界面端口 (默认: 9870)NameNode 对客户端服务端口 (默认: 8020)Secondary NameNode Web界面端口 (默认: 9868)…

Boss让你设计架构图,你懵逼了,解救你的参考图来啦。

架构图是指用于描述系统或软件的结构和组成部分之间关系的图形表示。 它是一种高层次的图示,用于展示系统的组件、模块、接口和数据流等,以及它们之间的相互作用和依赖关系。架构图通常被用于可视化系统的整体设计和组织结构,帮助人们理解系…

macos使用yarn创建vite时出现Usage Error: The nearest package directory问题

步骤是macos上使用了yarn create vite在window上是直接可以使用了yarn但是在macos上就出现报错 我们仔细看,它说的If /Users/chentianyu isnt intended to be a project, remove any yarn.lock and/or package.json file there.说是要我们清除yarn.lock和package.js…

【Linux】Linux线程

一、Linux线程的概念 1.什么是线程 1.一个进程的一个执行线路叫做线程,线程的一个进程内部的控制序列。 2.一个进程至少有一个执行线程 3.线程在进程内部,本质是在进程地址空间内运行 4.操作系统将进程虚拟地址空间的资源分配给每个执行流&#xff0…

JWK和JWT 学习

JWK和JWT 介绍 JWK (JSON Web Key) 和 JWT (JSON Web Token) 是现代Web应用程序中用于安全通信的两个重要概念。它们都是基于JSON的,并且是OAuth 2.0和OpenID Connect等协议的核心组成部分。 官方文档 JWT官方网站 JWK和JWK Set的RFC文档 JWT的RFC文档 JWK (JS…

MySQL数据库基础(数据库操作,常用数据类型,表的操作)

MySQL数据库基础(数据库操作,常用数据类型,表的操作) 前言 数据库的操作1.显示当前数据库2.创建数据库3.使用数据库4.删除数据库 常用数据类型1.数值类型2.字符串类型3.日期类型 表的操作1.查看表结构2.创建表3.删除表 总结 前言 …

Linux文件管理指令-001

一、文件目录 1ls ls 查看文件和目录 - a 显示指定目录下所有子目录与文件,包括隐藏文件 - t 显示时按修改时间(很近优先)而不是按名字排序。若文件修改时间相同,则 按字典顺序 - R 递归式地显示指定目录的各个子目录中的文件 - r 按字母逆序或很早…

完整性验证器:迈向 Starknet 超高可扩展性的一大步

原文:https://www.starknet.io/en/content/the-integrity-verifier-a-leap-toward-starknet-hyperscaling;https://www.starknet.io/en/ecosystem/grant 编译:TinTinLand 核心观点 由 Herodotus 开发的完整性验证器,使开发者能够…

算法-排序详解

目录 前言 比较排序 选择排序 插入排序 冒泡排序 归并排序 快速排序 非比较类排序 计数排序 桶排序 基数排序 排序的稳定性 排序算法的题目 前言 计算机的工作之一就是对数据的处理,处理数据有一个常见的操作就是对数据排序,比如新闻系统总…

JWT深入浅出

文章目录 JWT深入浅出1.JWT是什么2.为什么选JWT2.1 传统Session认证2.2 JWT认证 3.JWT怎么用4. jwt绝对安全吗? JWT深入浅出 1.JWT是什么 JWT(JSON Web Token)是一种用于在网络应用间传递信息的开放标准,通常用于身份认证和非敏…

Unity VR在编辑器下开启Quest3透视(PassThrough)功能

现在有个需求是PC端串流在某些特定时候需要开启透视。我研究了两天发现一些坑,记录一下方便查阅,也给没踩坑的朋友一些思路方案。 先说结论,如果要打PC端或者在Unity编辑器中开启,那么OpenXR当前是不行的可能还需要一个长期的过程,必须需要切换到Oculus。当然Unity官方指…

机器人系统可以支持对接人工系统吗?

​ 随着科技的飞速发展,机器人系统在各行各业都扮演着越来越重要的角色。它们可以高效地处理大量数据,执行繁琐的任务,甚至在某些领域超越了人类的能力。然而,机器人系统也有其局限性,特别是在处理复杂的人际交往…

机器学习作业4——朴素贝叶斯分类器

目录 一、理论 一个例子: 二、代码 对于代码的解释: 1.fit函数: 2.predict函数: 三、实验结果 原因分析: 一、理论 朴素贝叶斯分类器基于贝叶斯定理进行分类,通过后验概率来判断将新数据归为哪一类。通过利用贝…

SpringCloud面试题

SpringCloud常见组件有哪些 注册中心组件:Eureka、Nacos 负载均衡组件:Ribbon 远程调用组件:OpenFeign 网关组件:Zuul、Gateway 服务保护组件:Hystrix、Sentinel 服务配置管理组件:SpringCloudConfig、Nac…

Qt跨平台开发demo(适用萌新)

最近需要参与一款Qt跨平台的软件开发,在此之前,特把基础信息做学习和梳理,仅供参考。 所使用的技术和版本情况如下: 虚拟机:VMware 16.2.5操作系统:ubuntu-20.04.6-desktop-amd64:Mysql数据库…

纯血鸿蒙APP实战开发——数字滚动动效实现

介绍 本示例主要介绍了数字滚动动效的实现方案。 该方案多用于数字刷新,例如页面刷新抢票数量等场景。 效果图预览 使用说明: 下拉页面刷新,数字进行刷新。 实现思路 通过双重ForEach循环分别横向、纵向渲染数字。 Row() {ForEach(this…

服装店会员管理系统结合小程序商城帮你挖掘出潜在客户

在现代社会,随着科技的不断进步和人们消费习惯的变化,传统的服装店已经不再能够满足消费者的需求。为了更好地服务客户,提升销售业绩,许多服装店开始引入会员管理系统,并结合小程序商城,实现线上线下的无缝…

AJAX前端与后端交互技术知识点以及案例

Promise promise对象用于表示一个异步操作的最终完成(或失败)及其结果值 好处: 逻辑更清晰了解axios函数内部运作机制成功和失败状态,可以关联对应处理程序能解决回调函数地狱问题 /*** 目标:使用Promise管理异步任…

C++ int 学习

在C语言中 & 是取地址符号; 在C中有 int& 这样的,这里的&不是取地址符号,而是引用符号; 引用是C对C的一个补充; 变量的引用就是变量的别名,讲的通俗一点就是另外一个名字; a的值…