Django的多对多如何获取到数据并实现搜索分页
一.生成多对多的数据库
在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 应用名
这两个命名是生成迁移文件和迁移数据库
二.查看生成的数据库
当我们迁移数据库之后,会出现
这样的三个数据库
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})