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

当我们要实现删除和修改功能的时候要传一个id
所以我们在写修改和删除的时候在urls.py写入以下代码

from django.urls import path
from usertable.views import UsertableId

urlpatterns = [
	#在路由的后面写上一个<int:id>这样就可以获取到id了
    path('usertableid/<int:id>', UsertableId.as_view(), name="usertableid"),
]

数据删除

import json
from usertable.models import *
from django.views import View
from django.http import JsonResponse

class UsertableId(View):
    def delete(self, request, id):
        User.objects.filter(id=id).delete()#直接根据id获取到数据然后用delete()进行删除
        return JsonResponse({})

数据的修改

import json
from usertable.models import *
from django.views import View
from django.http import JsonResponse

class UsertableId(View):
    def patch(self, request, id):
        stb = json.loads(request.body)  # 获取修改后的数据
        user = User.objects.get(id=id)  # 根据id选择要修改的数据
        # 进行数据的修改
        user.username = stb['username']
        user.mobile = stb['mobile']
        user.emai = stb['emai']
        user.status = stb['status']
        user.role.set(stb["role"])  # 修改用户和角色的关联表stb["role"]是一个列表
        user.save()  # 再用save()进行保存
        return JsonResponse({})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值