Django的多对多如何获取到数据并实现搜索分页

简介: python manage.py makemigrations 应用名python manage.py migrate 应用名这两个命名是生成迁移文件和迁移数据库

一.生成多对多的数据库

在Django应用中的models.py中写入以下代码:

from django.db import models
# Create your models here.
# 角色表
class Role(models.Model):
    role = models.CharField(max_length=100)  # 角色
# 用户表
class User(models.Model):
    STATUS = ((0, "禁用"), (1, "启用"))  # 是否请用用户
    username = models.CharField(max_length=100)  # 用户名
    mobile = models.CharField(max_length=11)  # 电话
    email = models.EmailField()  # 邮箱
    status = models.IntegerField(choices=STATUS, default=1)  # 请用状态
    role = models.ManyToManyField(Role)  # 关联角色表

在终端执行


python manage.py makemigrations 应用名

python manage.py migrate 应用名


这两个命名是生成迁移文件和迁移数据库

二.查看生成的数据库

当我们迁移数据库之后,会出现

fb8f3759b7c049d7bbbab1be91b0d36a.png

这样的三个数据库


usertable_role是角色管理的数据库

usertable_user是用户管理的数据库

usertable_user_role是用户和角色关联的数据库

三.写应用中的views.py

获取所有数据的方法

from django.shortcuts import render
from usertable.models import *
# Create your views here.
from django.views import View
from django.http import JsonResponse
class Usertable(View):
    def get(self, request):
        all = []
        keyword = request.GET.get("keyword")  # 获取搜索的值,如果没有keyword的值的话,keyword就为None
        page = int(request.GET.get("page", 1))  # 当前页,如果为空就为第一页
        page_size = int(request.GET.get("page_size", 2))  # 每页显示的数据,如果为空就每页显示2条数据
        if keyword is not None:  # 判断keyword是否为空,如果为空就搜索全部,不为空就搜按username进行搜索
            alldata = User.objects.filter(username__contains=keyword)  # 按username进行搜索
        else:
            alldata = User.objects.all()  # 就搜索全部
        alldata = alldata[(page - 1) * page_size:page * page_size]  # 根据下标进行分页
        for i in alldata:
            all.append({
                "id": i.id,
                "username": i.username,
                "mobile": i.mobile,
                "email": i.email,
                "status": i.status,
                "role": list(i.role.all().values())  # 多对多用户获取角色的方法
            })
        return JsonResponse({"all": all})


相关文章
|
3月前
|
前端开发 JavaScript BI
Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)
使用echarts和highcharts图表库实现折线图、柱状图、饼图和数据集图
64 2
|
4月前
|
JavaScript 数据库 Python
django实现增删改查分页接口
django实现增删改查分页接口
|
7月前
|
监控 关系型数据库 Linux
Python采集linux服务器数据在Django Web界面展示
Python采集linux服务器数据在Django Web界面展示
|
6天前
|
设计模式 JSON 前端开发
前后端配置动态的数据字段标签(django_vue)
前后端配置动态的数据字段标签(django_vue)
13 0
|
6天前
|
Python
使用Django时,如何设计模型关系(一对一、一对多、多对多)?
Django支持三种模型关联:ForeignKey(一对多),OneToOneField(一对一)和ManyToManyField(多对多)。ForeignKey示例:`Article`有一个指向`Author`的外键。OneToOneField示例:`UserProfile`与`User`一对一关联。ManyToManyField示例:`Student`和`Course`之间多对多关系。这些关联字段便于反向查询,如`article.author`获取作者,`author.article_set.all()`获取作者所有文章。
9 1
|
15天前
|
SQL 缓存 数据库
Django ORM的性能优化:高效处理大量数据
【4月更文挑战第15天】本文介绍了优化Django ORM性能的六大技巧:1) 使用批量操作如bulk_create和bulk_update;2) 利用prefetch_related和select_related减少查询次数;3) 为常用字段添加索引;4) 优化数据库查询,避免循环查询;5) 使用缓存提升频繁查询性能;6) 在必要时使用原生SQL。这些策略能帮助处理大量数据时提升Django ORM的效率。
|
18天前
|
前端开发 API 数据库
Django(五):如何在Django中通过API提供数据库数据给前端
Django(五):如何在Django中通过API提供数据库数据给前端
|
2月前
|
测试技术 数据库 数据安全/隐私保护
实现Django Models的数据mock
实现Django Models的数据mock
26 0
|
7月前
|
搜索推荐 API 索引
Django中使用Elasticsearch进行搜索
Django中使用Elasticsearch进行搜索
152 0
|
4月前
|
JSON 数据可视化 前端开发
ssj兼职数据Django+pyecharts可视化展示
ssj兼职数据Django+pyecharts可视化展示
26 2