一对一
在models.py文件中新增两个类
# 学生 和 学生证的关系 1:1
class Student(models.Model):
# 学号
sno = models.AutoField(primary_key=True)
# 学生姓名
sname = models.CharField(max_length=30, unique=True)
class Meta:
db_table = 't_student'
def __unicode__(self):
return u'%s' % self.sname
class Scard(models.Model):
# 学号:主键,级联删除
sno = models.OneToOneField(Student, primary_key=True, on_delete=models.CASCADE)
# 学院
department = models.CharField(max_length=50)
# 专业
major = models.CharField(max_length=20)
# 进班时间
enterDate = models.DateField()
class Meta:
db_table = 't_scard'
def __unicode__(self):
return u'Scard:%s,%s' % (self.sno.sname, self.major)重新生成迁移文件
python manage.py makemigrations stu
执行迁移文件
python manage.py migrate


注意:上面是没有改动原有的model类的情况下,如果改动了原有model类的话,该进行以下操作;


工程中的stu/0001_initial这个迁移文件也干掉
原有的同一app下的表做好备份后全部删掉
然后重新执行命令
python manage.py makemigrations stu
python manage.py migrate
接下来在Python console中进行测试
from stu.models import * stu = Student(sname='zs') stu.save() scard = Scard(sno=stu,department='计算机科学与技术系',major='计算机及应用',enterDate='2018-9-1') scard.save() Scard.objects.first().sno <Student: zs> Student.objects.first() <Student: zs>
一对多
新增一个app onetomany
python manage.py startapp onetomany
Setting.py中配置
python manage.py makemigrations onetomany
python manage.py migrate
新增模型类
# Create your models here.
# 班级 和学生 1:n
class Clazz(models.Model):
cno = models.AutoField(primary_key=True)
cname = models.CharField(max_length=30)
def __unicode__(self):
return u'Clazz:%s--%s' % (self.cname)
# Create your models here.
# 学生 和 学生证的关系 1:1
class Student(models.Model):
# 学号
sno = models.AutoField(primary_key=True)
# 学生姓名
sname = models.CharField(max_length=30, unique=True)
# 所在班级
clazz = models.ForeignKey(Clazz, related_name='student')
def __unicode__(self):
return u'%s' % self.sname控制台测试
from onetomany.models import * clz1=Clazz.objects.create(cname='java') clz2=Clazz.objects.create(cname='python') Student.objects.create(sname='zs',clazz=clz1) <Student: zs> Student.objects.create(sname='ls',clazz=clz1) <Student: ls> Student.objects.create(sname='ww',clazz=clz2) <Student: ww> Student.objects.first().clazz.cname u'java' Clazz.objects.first().student.all() <QuerySet [<Student: zs>, <Student: ls>]>
可以封装函数,一次给两张表添加数据
def insertData(clsname,*snames):
try:
cls = Clazz.objects.get(cname=clsname)
except Clazz.DoesNotExist:
cls = Clazz.objects.create(cname=clsname)
for sn in snames:
try:
stu = Student.objects.get(sname=sn)
except Student.DoesNotExist:
Student.objects.create(sname=sn,clazz=cls)
insertData('t224','wangwang','taidi')
多对多
新增一个app manytomany
python manage.py startapp manytomany
Setting.py中配置
python manage.py makemigrations manytomany
python manage.py migrate
模型类创建
# 课程表 和 教师表 n:n
class Course(models.Model):
course_id = models.AutoField(primary_key=True)
course_name = models.CharField(max_length=30, unique=True)
def __unicode__(self):
return u'Course:%s' % self.course_name
class Teacher(models.Model):
tid = models.AutoField(primary_key=True)
tname = models.CharField(max_length=30, unique=True)
course = models.ManyToManyField(Course)
def __unicode__(self):
return u'Teacher:%s--%s' % (self.tname, self.course)
控制台测试
from manytomany.models import * cour1 = Course(course_name='Java') cour1.save() cour2 = Course(course_name='Python') cour2.save() t1 = Teacher(tid='1001',tname='晓哥') t1.save() t2 = Teacher(tname='帆哥') t2.save() t3 = Teacher(tname='胡哥') t3.save() t1.course.add(cour1) t2.course.add(cour2) t3.course.add(cour1,cour2) Course.objects.first().teacher_set.all() <QuerySet [<Teacher: Teacher:晓哥--manytomany.Course.None>, <Teacher: Teacher:胡哥--manytomany.Course.None>]> Teacher.objects.first().course.all() <QuerySet [<Course: Course:Java>]>
多对多封装函数的玩法
def insertData(tname, *coursenames):
cour_name = []
for c in coursenames:
try:
cour = Course.objects.get(course_name=c)
except Course.DoesNotExist:
cour = Course.objects.create(course_name=c)
cour_name.append(cour)
t = Teacher(tname=tname)
t.save()
t.course.add(*cour_name)
insertData('小李飞刀', '语文', '数学')
最终数据库来几张截图


over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有