1、项目结构

2、关键代码:

data6.settings.py

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
) DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'data6',
'USER':'root',
'PASSWORD':'passwd',
'PORT':'',
'HOST':'localhost',
}
}

blog.models.py

from django.db import models
class Author(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name class Book(models.Model):
name = models.CharField(max_length=30)
authors = models.ManyToManyField(Author)
def __unicode__(self):
return self.name

3、自动生成的数据表

4、Django通过shell进行的操作:

首先导入models里创建的对象:

>>> from blog.models import Author,Book

添加author:

>>> Author.objects.create(name='Tom01')

<Author: Tom01>

>>> Author.objects.create(name='Tom02')

<Author: Tom02>

>>> Author.objects.create(name='Tom03')

<Author: Tom03>

>>> Author.objects.create(name='Tom04')

<Author: Tom04>

查看生成的author:

>>> authors = Author.objects.all()

>>> authors

[<Author: Tom01>, <Author: Tom02>, <Author: Tom03>, <Author: Tom04>]

添加一本书Python book1

>>> b1 = Book()

>>> b1.name = 'Pyhon book1'

>>> b1.save()

获取一个作者

>>> tom2 = Author.objects.get(name__exact='Tom02')

>>> tom2

<Author: Tom02>

为Python book1添加作者

>>> b1.authors.add(tom2)

>>> b1.authors.add(authors[3])

b1的作者

>>> b1.authors.all()

[<Author: Tom02>, <Author: Tom04>]

>>> b1.authors.add(authors[2])

去掉一个作者

>>> b1.authors.remove(authors[3])

>>> b1.authors.all()

[<Author: Tom02>]

>>> b1.authors.add(authors[0])

>>> b1.authors.all()

[<Author: Tom01>, <Author: Tom02>]

>>> b1.authors.filter(name__exact='Carl')

[]

查看tom2有那些书

>>> tom2.book_set.all()

[<Book: Pyhon book1>]

为tom2添加一本书

>>> tom2.book_set.create(name="java")

<Book: java>

>>> tom2.book_set.all()

[<Book: Pyhon book1>, <Book: java>]

查看都有那些书

>>> books = Book.objects.all()

>>> books

[<Book: Pyhon book1>, <Book: java>]

去掉一本书

>>> tom2.book_set.remove(books[0])

>>> tom2.book_set.all()

[<Book: java>]

Django笔记-数据库操作(多对多关系)的更多相关文章

  1. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  2. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  3. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  4. Django 一对多,多对多关系解析

    [转]Django 一对多,多对多关系解析   Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 :        一对一: OneToOneField         ...

  5. Django与数据库操作

    Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...

  6. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  7. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  8. django models数据库操作

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  9. 03: Django Model数据库操作

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

随机推荐

  1. 一、项目基础架构(附GitHub地址)——以ABP为基础架构的一个中等规模的OA开发日志

    前言: 最近园子里ABP炒的火热.看了几篇对于ABP的介绍后,深感其设计精巧,实现优雅.个人感觉,ABP或ABP衍生品的架构设计,未来会成为中型Net项目的首选架构模式.如果您还不了解ABP是什么,有 ...

  2. RequireJS实例分析【转】

    转自http://www.cnblogs.com/xing901022/p/4658548.html 随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用.恰逢N ...

  3. 自定义不等高cell—storyBoard或xib自定义不等高cell

    1.iOS8之后利用storyBoard或者xib自定义不等高cell: 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView(cell的content ...

  4. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  5. 使用Chrome或Fiddler抓取WebSocket包

    首先,HTTP是建立在TCP协议基础上的,而WebSocket通常也是建立在TCP上,所以说为什么有些网页游戏抓不到包而有些又可以,这仅是因为你使用的抓包工具是针对了HTTP的通信协议. 我先从抽象的 ...

  6. 关于git不区分文件名大小写的处理

    今天遇到了git不区分文件名大小写的问题,一开始着实郁闷了一把. 处理办法: windows下在git中修改文件的大小写 git mv --force myfile MyFile 或者 git mv ...

  7. Linux下安装webstorm

    Linux下安装webstorm 1--在webstorm官网里面下载最新的版本 WebStorm-11.0.3.tar.gz 2--创建webstorm的安装目录 #mkdir /usr/webst ...

  8. AngularJs $q 承诺与延迟

    $q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式- ...

  9. JavaScript制作时钟特效

    需求说明:制作显示年.月.日.星期几并且显示上午(AM)和下午(PM)的 12进制的时钟,具体效果如下所示: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C// ...

  10. chmod权限设置

    一.其语法格式为:chmod [who] [opt] [mode] 文件/目录名 1.其中who表示对象,是以下字母中的一个或组合: u:表示文件所有者 g:表示同组用户 o:表示其它用户 a:表示所 ...