文章目录
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())