组合搜索速查_一对多

一、页面展示

组合搜索速查_一对多_第1张图片
image.png

二、分析

通过对url的分析,暂时我们可以归结出来搜索的思路,应用了url映射关系,分别对应数据库的查询,结果查询对应的两个条件都是一对多。

  • 构造数据库

文章库分别和文本类型,以及部门表为一对多关系映射

class Category(models.Model):
    caption = models.CharField(max_length=16)


class ArticleType(models.Model):
    caption = models.CharField(max_length=16)

class Article(models.Model):
    title = models.CharField(max_length=32)
    concent = models.CharField(max_length=225)

    category = models.ForeignKey(Category)
    article_type = models.ForeignKey(ArticleType)

  • 创建url

url的思路是创建,一个url对应一组数据,这里要注意的是当我们在给url设置对应名称时,这里最好和数据库中的字段名对应

    url(r'^article/-(?P\d+)-
          (?P\d+)',views.article,name='article')

  • views 层的编写

1.分别展示三个库的内容
2.展示文本内容时,要注意用过滤条件的筛选
3.当我们触发按钮时要保证,连接只改变我们点击的查询项,做图片说明

image.png

通过图片可以看出只改变前面的不改变后面的
4.所以前后两个,是需要两个无关联参数才能做到
5.我们一组关联是数据库,另外一组用连接返回的参数
def article(request,**kwargs):也就是这里的kwargs

def article(request,**kwargs):
    condition = {}
    # url = reverse('article',kwargs=kwargs)
    for k,v in kwargs.items():
        #我们要把链接的str转成int
        kwargs[k] = int(v)
        if v == "0":
            pass
        else:
            #字典的循环是每个键值对的循环
            condition[k] = v
    article_type_list = models.ArticleType.objects.all()
    category_list = models.Category.objects.all()
    resutl = models.Article.objects.filter(**condition)
    return  render(
        request,
        "article.html",
        {
            'result':resutl,
            'article_type_list':article_type_list,
            'category_list':category_list,
            'arg_dict':kwargs,

         }
    )
  • html

1.连接用返回查询数据库的id值
2.接收上一个连接的返回值


过滤条件

{% if arg_dict.article_type_id == 0 %} 全部 {% else%} 全部 {% endif %} {% for i in article_type_list %} {% if i.id == arg_dict.article_type_id %} {{ i.caption }} {% else %} {{ i.caption }} {% endif %} {% endfor %}
{% if arg_dict.category_id == 0 %} 全部 {% else%} 全部 {% endif %} {% for i in category_list %} {% if i.id == arg_dict.category_id %} {{ i.caption }} {% else %} {{ i.caption }} {% endif %} {% endfor %}

插询结果

    {% for i in result %}
  • {{ forloop.counter }}{{ i.title }}
  • {% endfor %}
  • 升级改造版

1.用标签simple_tag:
a.在app中创建templatetags文件
b.创建任意.py文件
要注意如果是一组连接使用数组,分装然后再拼接返回

  • html全部的写法
from django.utils.safestring import mark_safe
register = template.Library()

@register.simple_tag
def filter_all(arg_dict,k):
    '''
     {% if arg_dict.article_type_id == 0 %}
    全部
    {% else%}
        全部
    {% endif %}

    '''
    if k == "article_type_id":
        n1_k = arg_dict[k]
        n2_k = arg_dict['category_id']
        if n1_k == 0:
            ret = '全部' % n2_k
        else:
            ret = '全部' % n2_k
        return mark_safe(ret)
    else:
        n1_k = arg_dict[k]
        n2_k = arg_dict ['article_type_id']
        if n1_k == 0:
            ret = '全部' % n2_k
        else:
            ret = '全部' % n2_k
        return mark_safe(ret)
  • html 展示的写法
@register.simple_tag
def filter_article_type(article_type_list,arg_dict):
    '''

    {% for i in article_type_list %}
            {% if i.id == arg_dict.article_type_id %}
                {{ i.caption }}
            {% else %}
                {{ i.caption }}
            {% endif %}
        {% endfor %}
    '''
    ret = []
    for i in article_type_list:
        if i.id == arg_dict['article_type_id']:
            temp = '%s'%(i.id, arg_dict['category_id'],i.caption)
        else:
            temp = '%s'%(i.id, arg_dict['category_id'],i.caption)
        ret.append(temp)

    #把列表转化成字符串
    print(" ".join(ret))
    return mark_safe(" ".join(ret))

@register.simple_tag
def filter_category(category_list,arg_dict):
    '''
      {% for i in category_list %}
            {% if i.id == arg_dict.category_id %}
                {{ i.caption }}
            {% else %}
                {{ i.caption }}
            {% endif %}
        {% endfor %}

    '''
    ret = []
    for i in category_list:
        if i.id == arg_dict['category_id']:
            temp = '%s' % ( arg_dict['article_type_id'],i.id, i.caption)
        else:
            temp = '%s' % (arg_dict['article_type_id'],i.id, i.caption)
        ret.append(temp)

    # 把列表转化成字符串
    print(" ".join(ret))
    return mark_safe(" ".join(ret))
  • html
{% filter_all arg_dict 'article_type_id' %} {% filter_article_type article_type_list arg_dict%}
{% filter_all arg_dict 'category_id' %} {% filter_category category_list arg_dict %}

你可能感兴趣的:(组合搜索速查_一对多)