1.一对一
夫妻场景,众所周知,一夫一妻
class Husband(models.Model):
name = models.CharFiled('名字',default='')
wife = models.OneToOneFiled(Wife,on_delete=xx)
class Wife(models.Model):
name = models.CharFiled('名字',default='')
创建类:
#先创建无外建模型类
wife = Wife.ocjects.create(name='赵怡贤')
husband = Husband.objects.create(name='小源',wife=wife)
#也可以是:
#husband = Husband.objects.create(name='小源',wife_id=1)
查询
#正向查询
husband = Husband.objects.get(name='李小源')
print("%s的老婆是%s")%(husband.name,husband.wife.name)
#反向查询
wife = Wife.objects.get(name='赵怡贤')
print("%s的老公是%s")%(wife.name,wife.husband.name)
2.一对多
学校和学生之间的场景
class school(models.Model):
name = models.CharFiled('名字',max_length=10,default='')
class student(models.Model)
name = models.CharFiled('名字',max_length=10,default='')
school = models.ForeginKey(school,on_delete=xx)
#Foregin必须指定on_delete模式
先创建“一”再创建“多”
scl = school.objects.create(name='青青草原学园')
stu = studnet.objects.create(name='懒羊羊大王',school=sc1)
stu2 = student.objects.create(name='沸羊羊天王',school_id=1)
查询
#正向查询
stu = student.objects.get(id=1)
stu.school
#反向查询
scl = school.objects.get(id=1)
scl.student_set().all()
3.多对多
class Book(models.Model):
title = models.CharFiled('书名',max_length=20,default='')
class Author(models.Model):
name = models.CharFiled('名字',max_length=20,default='')
books = models.ManyToManyField(Book)
ps:如果是刚加入类中,需要执行
python manage.py makemigrations
python manage.py migrate
相互添加
author = Author.objects.create(name='断牙啦')
author2 = Author.objects.create(name='断牙咯')
book = User.objects.crate(tltle='百兵')
book2 = User.objects.crate(tltle='百兵2')
author.books.add(book)
author.books.add(book2)
book.author_set(author) #author_set()名字来源于对应的类名全小写+_set()
author.myBooks.all()#所有的书籍
author.myBooks().filter(price_gt=10) #价格大于10的书籍
book.author_set.all() #反向查询
book.author_set.filter()