django: db - many to many
2024-08-27 18:45:19
本讲介绍数据库多对多关系,代码样例继前文使用。
一,在 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 数据库的多对多关系操作十分方便。
最新文章
- Python3基础 列表之间+ 合并,不去除重复项
- Sphinx Search 学习 (一)
- AE常见接口之间的关系(较笼统)+arcgis常见概念
- 20145225 《Java程序设计》 第3周学习总结
- RM报表的打印偏移
- ADO.NET 实体框架 资料收集
- Codeforces 556A Case of the Zeros and Ones(消除01)
- iOS 9之New System Fonts(San Francisco 字体)
- PowerDesigner有几个需要设置
- asp.net 如何引用dll
- 翻译一篇文章:It&#39;s Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)
- iOS中 读取相册,调用系统相机 技术分享
- appium 报错:AttributeError:";NoneType&#39; object has no attribute &#39;XXX&#39;
- JS监听对象属性改变
- 密码与安全新技术专题之AI与密码
- 新建WINDOWS服务C#
- C# 获取区域和语言值
- BETA准备
- vmware中虚拟化的问题
- 计蒜客 无脑博士的试管们 【dfs】