django三级分类

模型类---自关联

from django.db import models

class Classify(models.Model):
    classify = models.CharField(max_length=100, verbose_name="商品分类")
    pid = models.ForeignKey(to="self", on_delete=models.CASCADE, 
                            verbose_name="关联id", null=True, default=None,
                            blank=True, related_name="aaa")

    def __str__(self):
        return self.classify

    class Meta:
        db_table = "classify"
        verbose_name_plural = "分类"

后端数据展示

 

一级标题展示和添加

class ClassifyAPIView(APIView):
    def get(self, request):
        cls = Classify.objects.filter(pid=None)
        temp = []
        for i in cls:
            temp_dict = {
                "id": i.id,
                "classify": i.classify
            }
            temp.append(temp_dict)
        return Response({
            "code": 200,
            "msg": "展示成功",
            "data": temp
        })

    def post(self, request):
        classify = request.data.get("classify")
        if not classify:
            return Response({"code": 400, "msg": "数据不能为空"})
        try:
            Classify.objects.create(classify=classify, pid_id=None)
        except Exception as e:
            print(e.args)
            return Response({"code": 400, "msg": "添加失败"})
        return Response({"code": 200, "msg": "添加成功"})

二级分类的展示和添加

class TwoAPIView(APIView):
    def get(self, request):
        id = request.query_params.get("id")
        cls = Classify.objects.filter(pid_id=id)
        temp = []
        for i in cls:
            temp_dict = {
                "id": i.id,
                "classify": i.classify,
                "pid": i.pid_id
            }
            temp.append(temp_dict)
        return Response({
            "code": 200,
            "msg": "展示成功",
            "data": temp
        })

    def post(self, request):
        id = request.data.get("id")
        cls = request.data.get("classify")
        if not all([id, cls]):
            return Response({"code": 400, "msg": "数据不能为空"})
        try:
            Classify.objects.create(classify=cls, pid_id=id)
        except Exception as e:
            print(e.args)
            return Response({"code": 400, "msg": "添加失败"})
        return Response({"code": 200, "msg": "添加成功"})

路由

from django.urls import path
from .views import *

urlpatterns = [
    # 一级标题
    path("cls/", ClassifyAPIView.as_view()),
    # 二级标题
    path("two/", TwoAPIView.as_view())
]

小结

  • 多级分类应用了自关联,自己关联自己,用一个pid字段来区分每一级
  • pid设置属性的时候要加空字段,null=True, default=None, blank=True
  • 标准格式:pid = models.ForeignKey(to="self", on_delete=models.CASCADE, 
                                verbose_name="关联id", null=True, default=None,
                                blank=True, related_name="aaa")
  • 下一级关联上一级的id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值