您的位置:首页 > 编程语言 > Go语言

django: db - many to many

2013-10-12 23:00 363 查看
本讲介绍数据库多对多关系,代码样例继前文使用。

一,在 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 数据库的多对多关系操作十分方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: