多对多菜单互相影响

场景,当选着父级菜单,展示对应的自己菜单,两者互相关联的状态

多级菜单的时候,主要二级菜单是被一级菜单影响,所以所有二级菜单显示情况根据一级菜单配合展示对应的数据情况

思路代码

1.当一级菜单选择全部的情况也就是0-0-0 或者0-1-0
	1.1 当0-0-0的时候 展示二级菜单所有项目
	1.2 当0-1-0的时候 也展示二级菜单所有项目,但要记录在查询数据库的集合条件中
2.当一级菜单的选择情况为1-0-0的时候,考虑二级菜单的情况,1-0-0/1-1-0/1-不存在-0
	2.1 当二级菜单为0 也就是全部的时候,查询对应1级菜单中对应的所有二级菜单选项,用来展示在页面,查询二级菜单的所有id,用来配合查询内容展示
	2.2 当二级菜单为指定的菜单时 也就是1-1-0,直接保存对应id
	2.3 当二级菜单输入的id不存在的时候,直接设置二级菜单的默认值为全部
3.当一级菜单不存在的时候,直接设置查询全部

复制

代码展示
def index(request,**kwargs):
   concent = {}
   for k,v in kwargs.items():
       kwargs[k] = int(v)

   work_id =  kwargs['work_id']
   language_id = kwargs['language_id']
   # 第一种0-0-0
   if work_id == 0:
       obj_language = models.Language.objects.all()
       # 第二种0-1-0
       if language_id :
           concent['language_id'] = language_id
   # 第三种 1-0-0
   else:
       obj_work = models.Work.objects.filter(id=work_id).first()
       if obj_work:
           # 页面展示对应标签
           obj_language = obj_work.language.all()
           # 获取所有的对应标签id
           v = obj_work.language.values_list('id')
           if v:
               language_list_id = list(zip(*v))[0]
           else:
               language_list_id = []

           # 1-0-0 情况
           if language_id == 0:
               concent['language_id__in'] = language_list_id

           else:
               # 第四种 1-1-0情况
               if language_id in language_list_id:
                   concent['language_id'] = language_id
               # 第五种 1-1000-0 不存在的情况
               else:
                   kwargs['language_id'] = 0
                   concent['language_id__in'] = language_list_id
       else:
           kwargs['language_id'] = 0
           kwargs['work_id'] = 0
           obj_language = models.Language.objects.all()
   if kwargs['level_id']!=0:
       concent['level_id'] = kwargs["level_id"]
   obj_level = models.Level.objects.all()
   obj_work = models.Work.objects.all()
   content = models.Content.objects.filter(**concent)

   return render(
       request,
       "index.html",
       {
           "obj_level":obj_level,
           "obj_work": obj_work,
           "content": content,
           "kwargs": kwargs,
           "obj_language":obj_language,
       }
                 )

复制

html展示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     <style>
       a{
            display: inline-block;
            padding: 3px 5px;
            border:1px solid #dddddd;
            margin: 5px 5px;


        }
          a.active{
             background-color:yellowgreen;
         }
    </style>
</head>
<body>
<div>
    {% if kwargs.work_id == 0 %}
        <a class="active" href="/index/0-{{kwargs.language_id}}-{{kwargs.level_id}}">全部</a>
    {% else %}
                <a href="/index/0-{{kwargs.language_id}}-{{kwargs.level_id}}">全部</a>

    {% endif %}
        {% for i in obj_work %}
            {% if kwargs.work_id == i.id %}
                        <a class="active" href="/index/{{i.id}}-{{kwargs.language_id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
             {% else%}
                        <a href="/index/{{i.id}}-{{kwargs.language_id}}-{{kwargs.level_id}}" >{{ i.name }}</a>

            {% endif %}
        {% endfor %}
    </div>
<div>
    {% if kwargs.language_id == 0 %}
        <a class="active" href="/index/{{kwargs.work_id}}-0-{{kwargs.level_id}}">全部</a>
    {% else %}
        <a href="/index/{{kwargs.work_id}}-0-{{kwargs.level_id}}">全部</a>
    {% endif %}
 {% for i in obj_language %}
             {% if kwargs.language_id == i.id %}
                <a  class="active" href="/index/{{kwargs.work_id}}-{{i.id}}-{{kwargs.level_id}}" >{{ i.name }}</a>
             {% else%}
                 <a href="/index/{{kwargs.work_id}}-{{i.id}}-{{kwargs.level_id}}" >{{ i.name }}</a>

             {% endif %}
        {% endfor %}
</div>
    <div>
       {% if kwargs.level_id == 0 %}
        <a class="active" href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-0">全部</a>
    {% else %}
                <a href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-0">全部</a>

    {% endif %}
        {% for i in obj_level %}
            {% if kwargs.level_id == i.id %}

                    <a  class="active" href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-{{i.id}}">{{ i.name }}</a>
             {% else%}
                      <a href="/index/{{kwargs.work_id}}-{{kwargs.language_id}}-{{i.id}}">{{ i.name }}</a>

             {% endif %}

        {% endfor %}
    </div>

<div>
    <h1>展示</h1>
    {% for i in content %}

        {{ i.title }}
    {% endfor %}
</div>
</body>
</html>

复制