django ManyToMany添加數據、展示數據


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':'成功')
            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM