首页 > 其他分享 >页面点击按钮实现排序

页面点击按钮实现排序

时间:2022-11-21 17:13:40浏览次数:45  
标签:name models html 按钮 org 排序 data order 页面

思路:用ajax实现局部 div 元素更新, 新写一个要更新 div 部分的html页面

models

class Article(models.Model):
    title = models.CharField(max_length=100, verbose_name='文章标题')
    
class Org(models.Model):
    name=models.CharField(max_length=30, verbose_name='公司名')
    
class Author(models.Model):
    username = models.CharField(max_length=30, verbose_name='用户名')
    articles_collected = models.ManyToManyField(to=Article, verbose_name='收藏的文章')
    org = models.ForeignKey(to=Org, on_delete=models.CASCADE, null=True)

一. 修改show-org.html

1.添加排序按钮
 <form id="order_select">
  <div style="float: left; margin-left: 100px;">
    排序:
      <input type="button" name = "article" onclick="orderArticle(this.name)" value="文章数">
      <input type="button" name = "author" onclick="orderAuthor(this.name)" value="作者数">
    
  </div>
  </form>

注意这里的事件点击事件onclick="orderArticle(this.name)",参数 里面获取input标签的name属性

2.添加点击事件
<script type="text/javascript">

function orderArticle(name){
  $.ajax({
      type: "GET",
      url: "/web/org_order/",    
      data: {'data': name},
      success: function (data) {
          $("#content").html(data);
      }
    })
}

function orderAuthor(name){
  $.ajax({
      type: "GET",
      url: "/web/org_order",
      data: {'data': name},
      success: function (data) {
          $("#content").html(data);
      }

    })
}

</script>

二. urls.py中添加

path('org_order/', org_order)

三. views中添加org_order函数

from django.db.models.aggregates import Count

def org_order(request):
  if request.method == 'GET':
    order_key = request.GET.get('data')
    print(order_key, type(order_key))

    if order_key == "author":
      print("author")
      orgs = Org.objects.annotate(num=Count('author__username')).order_by('num')
    
    if order_key == "article":
      print('article')
      orgs = Org.objects.annotate(num=Count('author__articles_collected')).order_by('num')

  for i in range(len(orgs)):
    orgs[i].counts = orgs[i].author_set.all().values('articles_collected').count()

  return render(request, "web/show-org-ajax.html", locals())
  

说明:annotate用来统计字段数量

四. show-org-ajax.html页面


<div id="content">
<div style="padding-left: 25px; ">
  <table class="table"  >
    <thead>
      <tr>
        <th>名称</th>
        <th>作者数量</th>
        <th>文章数</th>
      </tr>
    </thead>
    <tbody>
      {% for row in orgs %}
        <tr>
          <td>{{ row.name }}</td>
         
          <td>{{ row.author_set.all.count }}</td>
  
          <td>{{ row.counts }}</td>
  
        </tr>
      {% endfor %}
    </tbody>
  </table>
  </div>
</div>

show-org-ajax.html里的内容,其实就是原先show-org.html页面中id="content"的div元素,拷贝过来

标签:name,models,html,按钮,org,排序,data,order,页面
From: https://www.cnblogs.com/regit/p/16911957.html

相关文章

  • 数组去重排序
    letdata=[{key:"01",value:"压缩",},{key:"02",value:"永恩",},{key:"03",value:"压缩",},{key:"04",value:"卢锡安",},]......
  • JSP利用AJAX实现页面即时校验验证码
    在JSP页面实现验证码校验文章中当时是使用的Servlet类来进行的验证码校验,但是这种方式并不能即时校验,在正常情况下都是直接在用户输入之后就进行校验,这样对用户来说很方便......
  • 课程页面前端
    课程详情页接口视图类classCourseChapterView(GenericViewSet,CommonListModelMixin):queryset=CourseChapter.objects.all().filter(is_delete=False,is_show......
  • js对后端传递的三维扁平化数组排序
    [{Col:2,Row:3,Lay:1},{Col:1,Row:1,Lay:1},{Col:1,Row:2,Lay:4}] 简略数据格式如上,用sort方法排序data.Result.sort((a,b)=>{if(a.Row!==b.Row){retu......
  • 排序 sort 命令
    将数字按,从大到小排序 sort-n-rtest.txt将数字以从小到大排序sort-ntest.txt ......
  • [排序算法] 基数排序 (C++)
    基数排序解释基数排序基数排序RadixSort是一种非基于比较的排序算法。在基数排序中,和计数排序、桶排序的思想类似,我们要再次用到桶这个东西。......
  • 排序综合
    title:排序综合date:2022-11-1820:59:43tags:算法本文章遵守知识共享协议CC-BY-NC-SA,转载时需要署名,推荐在我的个人博客阅读。排序综合排序算法是编程竞赛中一......
  • MFC按钮
    属性1.               按钮上显示的文本 2.         按钮标识符 添加动作双击按钮-->        ......
  • 快速构建页面结构的 3D Visualization
    对Chrome扩展功能熟悉的小伙伴,可能都有用过Chrome的3D展示页面层级关系这个功能。可以通过控制台-->右边的三个小点-->MoreTools-->Layers打开。即可以看......
  • 页面中请求接口不通排查解决
    页面中显示  接口没通,没返回数据,找到了前端的同事,原因是:浏览器设置的问题,选择了【offine】,调整为【Nothrottling】就可以正常请求了  ......