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 ...
随机推荐
- C#中结构的使用
//声明结构 结构与枚举区别,一个不用声明类型,一个要声明类型 public struct Person { //这里叫字段,做用也是存储内容,变量只可以存一个值,字段可以存多个值 //声明字段前最好 ...
- JavaScript 显示弹出窗口(二)
window. open ( sURL , sName , sFeatures , bReplace ) sURL:可选项,被加载页面的html sName:可选项,指定打开的窗口的名字 _media ...
- 【转】setStyleSheet用法
[转自]http://blog.csdn.net/seanyxie/article/details/5925723 使用setStyleSheet来设置图形界面的外观: QT Style Sheets ...
- css样式-ime-mode text-transform
今天遇到一个新的css样式: ime-mode text-transform 有效小作用 取值:auto : 默认值.不影响ime的状态.与不指定 ime-mode 属性时相同 active : ...
- SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)
文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915 一.配置文件:SpringMVC 用的是 的MultipartFil ...
- phpcms v9联动菜单的调用方法_详解get_linkage函数
phpcms v9联动菜单调用方法[此为内容页调用方法]: {get_linkage($areaid,1,' >> ',1)} 显示效果: phpcms吧 >> 模板下载 &g ...
- centos 下 apache 重启启动命令
apache 启动 usr/local/apache243/bin/apachectl start apache 重启 usr/local/apache243/bin/apachectl restar ...
- 创建.NET应用程序所经历的步骤
1.使用某种.NET兼容语言(如C#)编写应用程序.2.把代码编译为(CIL),存储在程序集中.3.在执行代码时(如果这是一个可执行文件,就自动运行,或者在其他代码使用它时运行),首先必须使用JIT( ...
- 关于apriori算法的一个简单的例子
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...
- 简单javaEE思维导图