三个方向组合的筛选

Posted venvive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三个方向组合的筛选相关的知识,希望对你有一定的参考价值。

#url=video2.0-0-0.html,是按按照,0,1这些来排序的

url(r^video2-(?P<dr_id>\d+)-(?P<level_id>\d+)-(?P<category_id>\d+).html,views.video2,name=table_video2),
#video/views.py
def video2(request,*args,**kwargs):
    #0-0-0.html
    #1-0-0.html
    #1-1-0.html
    dr_id = kwargs.get("dr_id")
    cg_id = kwargs.get("category_id")
    lv_id = kwargs.get("level_id")
    condition = 
    direction_list = models.Direction.objects.all()
    level_list = models.Level.objects.all()
    if dr_id == "0":#未选择方向

        category_list = models.Category.objects.all()
        if cg_id == "0":#未选择分类
            pass
        else: #未选择方向,选择了分类
            condition["category_id"] =cg_id
    else:#选择方向
        category_list = models.Category.objects.filter(direction=dr_id)
        temp=category_list.values_list("id")
        #print(v)
        cg_id_list = list(zip(*temp))[0]
        #print(cg_id_list)
        if cg_id == "0":#选择了方向没有选择分类
            condition["category_id__in"]=cg_id_list
        else: #选择了方向也选择了分类
            if int(cg_id) in cg_id_list:
                condition["category_id"]=cg_id
            else:#请求的分类不在所有的分类中
                condition["category_id__in"] = cg_id_list
                kwargs["category_id"] = "0"
    if lv_id == "0":
        pass
    else:
        condition["level_id"]=lv_id
    result = models.Video.objects.filter(**condition)
    print(result)


    return render(request,"video/video2.html","direction_list":direction_list,
                                               "level_list":level_list,
                                               "category_list":category_list,
                                               "arg_list":kwargs)

利用reverse通过url的name获取url

#video_tags.py
#三个条件

from django.urls import reverse
from django.utils.safestring import mark_safe
@register.simple_tag
def direction_tag(direction,arg_dic):
    """
    方向
    :param catagory:
    :param arg_dic:
    :return:
    """
    url = reverse("table_video2",kwargs="dr_id":direction.id,"level_id":arg_dic.get("level_id"),"category_id":arg_dic.get("category_id"))
    if str(direction.id) == arg_dic.get("dr_id"):

        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,direction.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,direction.name)
        return mark_safe(tag)

@register.simple_tag
def three_catagory_tag(catagory,arg_dic):
    """
    等级
    :param catagory:
    :param arg_dic:
    :return:
    """
    url = reverse("table_video2",kwargs="dr_id":arg_dic.get("dr_id"),"level_id":arg_dic.get("level_id"),"category_id":catagory.id)
    if str(catagory.id) == arg_dic.get("category_id"):

        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,catagory.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,catagory.name)
        return mark_safe(tag)


@register.simple_tag
def three_level_tag(level,arg_dic):
    url = reverse("table_video2",kwargs="dr_id":arg_dic.get("dr_id"),"level_id":level.id,"category_id":arg_dic.get("category_id"))

    if str(level.id) == arg_dic.get("level_id"):
        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,level.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,level.name)
        return mark_safe(tag)

@register.simple_tag
def three_tag_all(arg_dic,key):
    if key == "dr_id":
        url = reverse("table_video2", kwargs="dr_id":0,"level_id": arg_dic.get("level_id"), "category_id": arg_dic.get("category_id"))
    elif key == "category_id":#category_id
        url = reverse("table_video2", kwargs="dr_id":arg_dic.get("dr_id"),"level_id": arg_dic.get("level_id"), "category_id":0)
    elif key == "level_id":
        url = reverse("table_video2", kwargs="dr_id":arg_dic.get("dr_id"),"level_id":0 , "category_id":arg_dic.get("category_id"))
    else:
        url=""
    if arg_dic.get(key) == "0":
        tag = ‘‘‘<a href="%s" style="color:red">全部</a>‘‘‘%(url,)
    else:
        tag = ‘‘‘<a href="%s">全部</a>‘‘‘ % (url,)

    return mark_safe(tag)
#video_tags.py
#三个条件

from django.urls import reverse
from django.utils.safestring import mark_safe
@register.simple_tag
def direction_tag(direction,arg_dic):
    """
    方向
    :param catagory:
    :param arg_dic:
    :return:
    """
    url = reverse("table_video2",kwargs="dr_id":direction.id,"level_id":arg_dic.get("level_id"),"category_id":arg_dic.get("category_id"))
    if str(direction.id) == arg_dic.get("dr_id"):

        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,direction.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,direction.name)
        return mark_safe(tag)

@register.simple_tag
def three_catagory_tag(catagory,arg_dic):
    """
    等级
    :param catagory:
    :param arg_dic:
    :return:
    """
    url = reverse("table_video2",kwargs="dr_id":arg_dic.get("dr_id"),"level_id":arg_dic.get("level_id"),"category_id":catagory.id)
    if str(catagory.id) == arg_dic.get("category_id"):

        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,catagory.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,catagory.name)
        return mark_safe(tag)


@register.simple_tag
def three_level_tag(level,arg_dic):
    url = reverse("table_video2",kwargs="dr_id":arg_dic.get("dr_id"),"level_id":level.id,"category_id":arg_dic.get("category_id"))

    if str(level.id) == arg_dic.get("level_id"):
        tag = ‘‘‘<a href="%s" style="color:red">%s</a>‘‘‘%(url,level.name)
        return mark_safe(tag)
    else:
        tag = ‘‘‘<a href="%s">%s</a>‘‘‘%(url,level.name)
        return mark_safe(tag)

@register.simple_tag
def three_tag_all(arg_dic,key):
    if key == "dr_id":
        url = reverse("table_video2", kwargs="dr_id":0,"level_id": arg_dic.get("level_id"), "category_id": arg_dic.get("category_id"))
    elif key == "category_id":#category_id
        url = reverse("table_video2", kwargs="dr_id":arg_dic.get("dr_id"),"level_id": arg_dic.get("level_id"), "category_id":0)
    elif key == "level_id":
        url = reverse("table_video2", kwargs="dr_id":arg_dic.get("dr_id"),"level_id":0 , "category_id":arg_dic.get("category_id"))
    else:
        url=""
    if arg_dic.get(key) == "0":
        tag = ‘‘‘<a href="%s" style="color:red">全部</a>‘‘‘%(url,)
    else:
        tag = ‘‘‘<a href="%s">全部</a>‘‘‘ % (url,)

    return mark_safe(tag)
#video2.html
<!DOCTYPE html>
<html lang="en">
% load video_tags %
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>筛选条件</h1>
    <div class="filtered">
        <div>
            % three_tag_all arg_list "dr_id" %
            % for direction in direction_list%
                % direction_tag direction arg_list %
            % endfor%
        </div>
        <div>
            % three_tag_all arg_list "category_id" %
            % for category in category_list%
                % three_catagory_tag category arg_list %
            % endfor %
        </div>

        <div>
            % three_tag_all arg_list "level_id" %
            % for level in level_list%
                % three_level_tag level arg_list %
            % endfor%
        </div>

    </div>
    <h1>查询内容</h1>
    <div class="container">
        %for result in results%
        <div style="width: 100px;height: 260px;float: left">
            <img src="result.img" style="width: 100px;height: 150px">
            <p>result.title</p>
            <p>result.summary</p>
        </div>
        %endfor%
    </div>

</body>
</html>

后来创建的表:

class Level(models.Model):
    """等级"""
    name = models.CharField(max_length=32)

class Direction(models.Model):
    """方向"""
    name = models.CharField(max_length=32)
    d_2_c = models.ManyToManyField("Category")

class Category(models.Model):
    """分类"""
    name = models.CharField(max_length=32)

class Video(models.Model):
    """视频"""
    level = models.ForeignKey("Level",on_delete=models.CASCADE)
    category = models.ForeignKey("Category",on_delete=models.CASCADE)
    title = models.CharField(verbose_name="标题",max_length=32)
    summary = models.CharField(verbose_name="简介",max_length=32)
    img = models.ImageField(verbose_name="图片",upload_to="D:\soft_install\python3\python3.7\PerfectCRM\Perfectcrm\statics\img\Video")
    href = models.CharField(verbose_name="视频地址",max_length=256)
    create_date = models.DateTimeField(auto_now_add=True)

 

以上是关于三个方向组合的筛选的主要内容,如果未能解决你的问题,请参考以下文章

排序、排序、筛选 SQL Server 的复杂组合

如何筛选多个条件

pandas条件组合筛选和按范围筛选

pandas使用组合条件筛选过滤数据行

多数据组合筛选数据

pandas使用query函数基于组合索引筛选dataframe的数据行(与and或or非not)