Django的关系映射

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值