django: db - many to many
本讲介绍数据库多对多关系,代码样例继前文使用。
一,在 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 数据库的多对多关系操作十分方便。
django: db - many to many的更多相关文章
- 在django项目外,使用django.db链接数据库(postgres)
要用python链接到数据库,又不想写太多代码.想到了django,就偷懒了下.用django.db直连. django版本:1.6.5 (1.5以后可以用以下代码) #coding=utf-8 __ ...
- django - from django.db.models import F - class F
F() 的执行不经过 python解释器,不经过本机内存,是生成 SQL语句的执行. # Tintin filed a news story! reporter = Reporters.objects ...
- Django db relationship
# coding=utf-8 from django.db import models """ Django数据库关系: 一对一关系:OneToOneField 多对多关 ...
- django: db - display
本讲介绍数据在页面中的呈现,内容很简单,就是嵌套循环在模板中的使用. 一,修改 csvt03/urls.py: from django.conf.urls import patterns, inclu ...
- django: db - admin
本讲演示简单使用 Django Admin 功能. 一,修改 settings.py,添加 admin 应用: INSTALLED_APPS = ( 'django.contrib.auth', 'd ...
- django: db - many to one
models 模块中的对象有三种对应关系:多对一,多对多,一对一.本讲说明多对一关系. blog/models.py: from django.db import models class Emplo ...
- django: db howto - 2
继 django: db howto - 1 : 一 操作数据库的三种方式: [root@bogon csvt03]# python2.7 manage.py shell Python 2.7.5 ( ...
- django: db howto - 1
以在 Django 中使用 MySQL 为例,首先要安装 MySQL 和 MySQL-python 组件,确保 python 能执行 import MySQLdb. MySQL 中创建数据库: [ro ...
- django.db.utils.OperationalError: 1050解决方案
manage.py migrate时进行同步数据库时出现问题;django.db.utils.OperationalError: (1050, "Table '表名' already exi ...
- 报错django.db.migrations.exceptions.InconsistentMigrationHistory
Pycharm强大的功能总是让我很是着迷,比如它的makemigrations 和 migrate. 然而某一次,当我再次敲下这熟悉的命令时,它报错了.... Traceback (most rece ...
随机推荐
- Something About Variable
CONTENT(目录) 前言 Variable declearation:three rules you can break 1.Don't set var stat ...
- [译] 什么是移动友好的 - Mobile-friendliness
什么是移动友好的? 移动友好到底意味着什么取决于您与谁讨论它. 我们不妨这样理解: 移动友好的设计以 表现力, 内容和性能 三方面为目标来改善用户体验. 表现力 - Presentation ...
- PHPCMS 标签与解析小记_Jason
Content模块下的标签解析:phpcms\modules\content\classes\content_tag.class.php 推荐位:public function position
- phpcms v9 数据库分离部署
v9数据模型功能,允许用户把不同的数据表,分离到不同的数据库服务器上.以实现负载的分离,更加的符合大访问网站的需求. <ignore_js_op> 数据分离方法 1.数据库连接配置配置文件 ...
- php 异常捕获
1 首先是try,catch <?php $path = "D:\\in.txt"; try //检测异常 { file_open($path); } catch(Excep ...
- 【创建型】Builder模式
生成器模式的主要思想:将产品对象的创建与表现分离开,并且同样的创建过程可以有不同的产品表现. 直白一点可以理解为:待创建的对象是复杂的,一般情况下是需要经过多个步骤的创建后,最终才能将完整产品创建好, ...
- MMDrawerController 使用遇到的问题及定制
MMDrawerController 1,集成UIViewController * leftDrawer = [[UIViewController alloc] init]; UIViewContro ...
- Java DES 测试
package com.des.test; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyEx ...
- BZOJ1119: [POI2009]SLO
1119: [POI2009]SLO Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 379 Solved: 181[Submit][Status] ...
- 将大型 Page Blob 的页范围进行分段
Windows Azure 存储支持一种 Blob 类型,即 Page Blob.Page Blob 通过仅将已写入但未清除的页存入物理存储, 来有效存储稀疏数据.每页大小为 512 字节.Ge ...