django数据库操作-增删改查-多对多关系以及一对多(外键)关系

本文深入探讨了Django中一对多(外键)和多对多关系的数据库操作,包括如何获取对象、添加对象、删除对象的方法,以及实例代码演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django数据库操作-增删改查-多对多关系以及一对多(外键)关系

(2012-10-04 20:31:09)
标签:

杂谈

分类:python_django
一、一对多(外键)

例子:一个作者对应多本书,一本书只有一个作者

model代码:

[python] view plain copy
  1. class<wbr>Person(models.Model);<wbr><wbr></wbr></wbr></wbr>
  2. name<wbr>=<wbr>models.CharField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'作者姓名'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">,<wbr>max_length=</wbr></span><span style="line-height:21px; word-break:normal; word-wrap:normal">10</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
  3. age<wbr>=<wbr>models.IntegerField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'作者年龄'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
  4. <wbr><wbr></wbr></wbr>
  5. class<wbr>Book(models.Model):<wbr><wbr></wbr></wbr></wbr>
  6. person<wbr>=<wbr>models.ForeignKey(Person,<wbr>related_name=<span style="line-height:21px; word-break:normal; word-wrap:normal">'person_book'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr></wbr>
  7. title<wbr>=<wbr>models.CharField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'书籍名称'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">,<wbr>max_length=</wbr></span><span style="line-height:21px; word-break:normal; word-wrap:normal">10</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
  8. pubtime<wbr>=<wbr>models.DateField(<span style="line-height:21px; word-break:normal; word-wrap:normal">'出版时间'</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>

(一)获取对象方法:

1.从作者出发获取书籍

[python] view plain copy
  1. person<wbr>=<wbr>Person.objects.fiter(你的条件)<wbr><wbr></wbr></wbr></wbr></wbr>
  2. book<wbr>=<wbr>person.book_set.all()<wbr><wbr></wbr></wbr></wbr></wbr>

2.从书籍出发获取作者

[python] view plain copy
  1. p<wbr>=<wbr>book.person<wbr><wbr></wbr></wbr></wbr></wbr>

二、多对多

例子:一个作者对应多本书,一本书有多个作者

model代码:

[python] view plain copy
  1. class<wbr>Author(models.Model):<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
  2. <wbr><wbr><wbr><wbr>first_name<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">30</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
  3. <wbr><wbr><wbr><wbr>last_name<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">40</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
  4. <wbr><wbr><wbr><wbr>email<wbr>=<wbr>models.EmailField()<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  5. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  6. class<wbr>Book(models.Model):<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
  7. <wbr><wbr><wbr><wbr>title<wbr>=<wbr>models.CharField(max_length=<span style="line-height:21px; word-break:normal; word-wrap:normal">200</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr></wbr></wbr></wbr>
  8. <wbr><wbr><wbr><wbr>authors<wbr>=<wbr>models.ManyToManyField(Author)<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

(一)获取对象方法:

1.从书籍出发获取作者

[python] view plain copy
  1. b<wbr>=<wbr>Book.objects.get(id=</wbr></wbr>50)<wbr><wbr></wbr></wbr>
  2. b.authors.all()<wbr><wbr></wbr></wbr>
  3. b.authors.filter(first_name='Adam')<wbr><wbr></wbr></wbr>

2.从作者出发获取书籍



[python] view plain copy
  1. a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
  2. a.book_set.all()<wbr><wbr></wbr></wbr>

(二)添加对象方法:

[python] view plain copy
  1. a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
  2. b<wbr>=<wbr>Book.objects.get(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">50</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
  3. b.authors.add(a)<wbr><wbr></wbr></wbr>


(三)删除对象对象方法:

[python] view plain copy
  1. a<wbr>=<wbr>Author.objects.get(id=</wbr></wbr>1)<wbr><wbr></wbr></wbr>
  2. b<wbr>=<wbr>Book.objects.get(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">50</span><span style="line-height:21px; word-break:normal; word-wrap:normal">)<wbr><wbr></wbr></wbr></span></wbr></wbr>
  3. b.authors.remove(a)<wbr>或者<wbr>b.authors.filter(id=<span style="line-height:21px; word-break:normal; word-wrap:normal">1</span><span style="line-height:21px; word-break:normal; word-wrap:normal">).delete()</span></wbr></wbr>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值