本讲介绍数据库多对多关系,代码样例继前文使用。

一,在 blog/models.py 中创建对象:

# Many-To-Many Example : Authors vs Books
class Author(models.Model):
name = models.CharField(max_length=20) def __unicode__(self):
return self.name class Book(models.Model):
name = models.CharField(max_length=20)
authors = models.ManyToManyField(Author) def __unicode__(self):
return self.name

二,同步数据库:

[root@bogon csvt03]#  py manage.py syncdb
Creating tables ...
Creating table blog_author
Creating table blog_book_authors <--- 多对多映射表
Creating table blog_book
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

三,Many-to-Many 数据的使用:

[root@bogon csvt03]#  ipython manage.py shell
In [1]: from blog.models import Author , Book In [2]: au1 = Author(name='Author-1') In [3]: au2 = Author(name='Author-2') In [4]: au3 = Author(name='Author-3') In [5]: au4 = Author(name='Author-4') In [6]: b1=Book(name='Book-1') In [7]: b1.save() <--- 必须先生成数据库实例才能添加多对多关系 In [8]: au1.save() <--- 必须先生成数据库实例才能添加多对多关系 In [9]: au2.save() <--- 必须先生成数据库实例才能添加多对多关系 In [10]: au3.save() <--- 必须先生成数据库实例才能添加多对多关系 In [11]: au4.save() <--- 必须先生成数据库实例才能添加多对多关系 In [12]: b1.authors.add(au1,au2) <--- 添加多对多关系 In [13]: b1.authors.all()
Out[13]: [<Author: Author-1>, <Author: Author-2>] In [14]: b1.authors.filter(name__exact='Author-2')
Out[14]: [<Author: Author-2>] In [15]: au1.book_set.all() <--- 多对多关系反向查询
Out[15]: [<Book: Book-1>] In [16]: au3.book_set.add(b1) <--- 多对多关系反向添加 In [17]: b1.authors.all()
Out[17]: [<Author: Author-1>, <Author: Author-2>, <Author: Author-3>] In [18]: au4.book_set.create(name='Book Newly Created') <--- 创建并添加多对多关系
Out[18]: <Book: Book Newly Created> In [19]: au4.book_set.all()
Out[19]: [<Book: Book Newly Created>] In [20]: au2.book_set.all()
Out[20]: [<Book: Book-1>] In [21]: au2.book_set.remove(b1) <--- 移除关系 In [22]: au2.book_set.all() In [23]:

可见,Django 数据库的多对多关系操作十分方便。

最新文章

  1. Python3基础 列表之间+ 合并,不去除重复项
  2. Sphinx Search 学习 (一)
  3. AE常见接口之间的关系(较笼统)+arcgis常见概念
  4. 20145225 《Java程序设计》 第3周学习总结
  5. RM报表的打印偏移
  6. ADO.NET 实体框架 资料收集
  7. Codeforces 556A Case of the Zeros and Ones(消除01)
  8. iOS 9之New System Fonts(San Francisco 字体)
  9. PowerDesigner有几个需要设置
  10. asp.net 如何引用dll
  11. 翻译一篇文章:It&#39;s Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)
  12. iOS中 读取相册,调用系统相机 技术分享
  13. appium 报错:AttributeError:&quot;NoneType&#39; object has no attribute &#39;XXX&#39;
  14. JS监听对象属性改变
  15. 密码与安全新技术专题之AI与密码
  16. 新建WINDOWS服务C#
  17. C# 获取区域和语言值
  18. BETA准备
  19. vmware中虚拟化的问题
  20. 计蒜客 无脑博士的试管们 【dfs】

热门文章

  1. 【JQuery学习笔记】一、基础篇
  2. ionic开发环境搭建
  3. jquery 20行代码实现简单轮播效果
  4. 黑马程序员——C语言开门片内存分析
  5. iOS APP安全杂谈
  6. QuerryRunner Tools
  7. TimeZone 时区 (JS .NET JSON MYSQL)
  8. 通过MYSQL命令行直接建数据库
  9. Windows 系统版本判断
  10. COJ WZJ的数据结构(负十八)splay_tree的天堂