1.在modle.py
中創建多對多數據庫
from django.db import models
class Role(models.Model):
role_name = models.CharField(max_lenth=12,verbose_name='角色',null=True)
class User(models.Model):
name = models.CharField(max_lenth=32,verbose_name='用戶',null=True)
roles = models.ManyToManyField(Role)
2.在創建一個serialzer.py
用來寫序列化
from rest_framework import serializer
from .models import *
class RoleSer(serializers.ModelSerializer)
class Meta:
model = Role # 指定數據庫
fields = '__all__
class UserSer(serializers.ModelSerializer):
class Meta:
model = User # 指定數據庫
fields = '__all__' # 指定字段 all為所有字段
3.在views.py
中開始寫邏輯
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from user.models import *
# from user.serializers import *
from .serializer import *
# Create your views here.
class UserManyToMany(ApiView):
# 展示數據
def get(serlf,request):
# 獲取數據
u_id = request.query_params.get('u_id') # 獲取u_id
r_id = request.query_params.get('r_id') # 獲取r_id
# 驗證數據
if not all([u_id,r_id]): # 判斷數據是否為空
return Response({'code':4001,'msg':'參數不全'})
# 邏輯與入庫
# 知道ManyToMany字段是的查詢方式
user_obj = User.object.get(id=u_id)
role_obj = user_obj.roles.all()
ser_obj = RoelSer(role_obj,many=True)
# 在不知道使用ManyToMany字段的查詢方式
role_obj = Role.object.get(id=r_id)
user_obj = role_obj.user_set.all()
ser_obj = UserSer(user_obj,many=True)
# 返回數據
return Response({'code':200,'data':ser_obj.data})
# 添加數據
def post(self,request):
# 獲取數據
r_name = request.data.get('r_name') # 獲取role_name
u_name = request.data.get('u_name') # 獲取name
# 驗證數據
if not all([r_name,u_name]): # 判斷參數是否存在
return Response({'code':4001,'msg':'參數不全})
# 邏輯與入庫
# 反向添加
# user_obj = User.object.get(name=u_name)
# role_obj = Role.object.get(role_name=r_name)
# user_obj.roles.add(role_obj)
# 反向添加
user_obj = User.object.filter(name=u_name)
role_obj = Role.object.get(role_name=r_name)
role_obj.user_set.add(*user_obj) # *號代表多條數據
return Response('code':200,'msg':'成功')