Python第26天 一对多多对多增删改查

2018-12-26 11:34:48

数据库建表

#models.py
from django.db import models

# Create your models here.
class UserInfo(models.Model):
    name = models.CharField(max_length=32,null=True)
    username = models.CharField(max_length=32,null=True)
    password = models.CharField(max_length=32,null=True)
    age = models.CharField(max_length=32,null=True)
    def __str__(self):
        return self.username

class School(models.Model):
    name = models.CharField(max_length=32,null=True,verbose_name='名字')
    def __str__(self):
        return self.name

class Class(models.Model):
    name = models.CharField(max_length=32,null=True,verbose_name='名字')
    sch = models.ForeignKey(to='School',default=1) #一对多字段sch
    user = models.ManyToManyField(to='UserInfo')   #多对多字段user
    def __str__(self):
        return self.name

一对多与多对多数据库增删改查

#views.py
def login(request):
    if request.method == 'GET':
        obj_list=models.UserInfo.objects.all()
#---------------------------------------一对多增删改查------------------------------------------------#
        
    #一对多查询
    _char = '3班'
    obj = models.Class.objects.all()
    for i in obj:
        print(i.sch.name)

    #一对多增加
    obj = models.School.objects.create(name='6#')
    print('****',type(obj))
    class_obj = models.Class.objects.create(name='6班',sch=obj)

    #一对多删除、修改,都是基于查询来做
    models.Class.objects.filter(name='4班').first().delete() #--》删除class表中的name='4班'
    models.Class.objects.filter(sch__name='6#').delete() #--》跨表删除School表中的ch__name='6#'
    models.Class.objects.filter(sch__name='1#').update(name='1班') #--》跨表修改

#---------------------------------------多对多增删改查------------------------------------------------#
    #--多对多查询--#
    _char = '3班'
    obj = models.Class.objects.all() #先生成一个对象
    for i in obj:
        print('+++++++',i)
        if i.name == _char:
            obj =  models.Class.objects.filter(name=_char).first() #先生成一个班级的对象
            a = obj.user.all() #生成了班级对象之后,将UserInfo的数据获取过来,生成qureset_list
            #多对多查询 user是class表中多对多的字段,它会与UserInfo表自动生成一个新的表生成后的表名为class_user
            for j in a:#循环之后,可以跨表获取到UserInfo的信息
                print('----------',j.password)

    #--多对多的增加add()--#
    _char = '3班'
    #方法一,创建获取id
    class_obj = models.Class.objects.filter(name=_char).first()
    user_obj = models.UserInfo.objects.create(name='yingzizhu')#需要一个userinfo表里的id,直接创建之后.id能够获取到
    class_obj.user.add(user_obj.id) #增加的是class_user这个表的关系
    #方法二,查询已有的字段,进行关联
    class_obj = models.Class.objects.filter(name=_char).first()
    user_obj = models.UserInfo.objects.filter(name='yingzizhu') #获取userinfo内某个字段信息,
    class_obj.user.add(*user_obj) #操作class_user关系表,将class与userinfo内部字段进行关联,
    print(*user_obj,type(*user_obj))
    #--------------------------------------------------------------------------------#
    #--删除remove()、清空clear()--#
    class_obj = models.Class.objects.filter(name=_char).first()
    class_obj.user.remove()
    class_obj.user.clear()

    #--修改,先删除,后增加--#
    class_obj = models.Class.objects.filter(name=_char).first()
    user_obj = models.UserInfo.objects.filter(name='yingzizhu')
    class_obj.user.add(*user_obj)


    return render_to_response('login.html',locals())

给TA打赏
共{{data.count}}人
人已打赏
开发

Python第46天 后台admin增加数据

2023-9-11 18:33:07

开发

Python第43天 阿里云API简单使用

2023-9-11 18:33:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索