最近在博客园看来越来越多的关于python的文章,我看到时感觉特别的好,因为我也是一个特别喜欢python这门语言,喜欢python的简洁、干净,简洁而不失强大。

  最近在学习django的Model模型,记录的笔记如下:

from django.db import models

class Person(models.Model):

name = models.CharField(maxlength=10)

class Man(Person):

job = models.CharField(maxlength=20)

class Woman(Person):

makeup = models.CharField(maxlength=20)

则使用manage.py执行sqlall命令时,会看到这样的结果:

CREATE TABLE "uom_person" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(10) NOT NULL

);

CREATE TABLE "uom_man" (

"person_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "uom_person" ("id"),

"job" varchar(20) NOT NULL

);

CREATE TABLE "uom_woman" (

"person_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "uom_person" ("id"),

"makeup" varchar(20) NOT NULL

);

可见,Django ORM中默认使用JOINED方式来实现继承关系的映射。

TABLE_PER_CLASS映射

如果要实现每个具体类一张表,只需要将父类指定为抽象类(abstract),这样就不会创建父类对应的表,而将父类的字段复制到子类中去映射。如下:

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=10)

class Meta:

abstract = True

class Man(Person):

job = models.CharField(max_length=20)

class Woman(Person):

makeup = models.CharField(max_length=20)

sqlall 的结果:

CREATE TABLE "uom_man" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(10) NOT NULL,

"job" varchar(20) NOT NULL

);

CREATE TABLE "uom_woman" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(10) NOT NULL,

"makeup" varchar(20) NOT NULL

);

将父类声明为abstract时,该类将没有objects属性,也就是说没有Manager方法,所有无法进行数据操作,只有子类才能进行。

SINGLE_TABLE映射

在TABLE_PER_CLASS的基础上,如果进一步指定子类的映射表名与父类的相同,则子类和父类将映射到同一张表,对所有的子类都这样指定,就可以实现SINGLE—_TABLE映射:

from django.db import models

class Person(models.Model):

name = models.CharField(max_length=10)

class Meta:

abstract = True

class Man(Person):

job = models.CharField(max_length=20)

class Meta:

db_table = 'oum_person'

class Woman(User):

makeup = models.CharField(max_length=20)

sqlall 的结果:

CREATE TABLE "oum_person" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(10) NOT NULL,

"job" varchar(20) NOT NULL

);

CREATE TABLE "uom_woman" (

"user_ptr_id" integer NOT NULL PRIMARY KEY,

"makeup" varchar(20) NOT NULL

);

请关照我的个人项目(totemhub)

django笔记1的更多相关文章

  1. Web框架——Django笔记

    Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序   ...

  2. Django笔记 —— Admin(Django站点管理界面)

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django笔记 —— 模型

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  4. Django笔记 —— MySQL安装

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  5. Django笔记 —— 模板

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  6. django笔记三之admin的管理

    django笔记三之admin的管理 设置自动admin应用 vim todos/settings.py INSTALLED_APPS = ( 'django.contrib.admin', 新版本已 ...

  7. django笔记二之数据库

    django笔记二之数据库 [同步数据库之前的操作] yum install MySQL-python.x86_64 -y 2)开启数据库服务并创建表 创建数据库设置 为utf8: create da ...

  8. django笔记-模型数据模板呈现过程记录(多对多关系)

    首先,推荐一个网址:http://www.tuicool.com/articles/BfqYz2F,因为这里的比我的要有条理,更有利于各位的理解. 以下仅为为个人一次不完整的笔记: 环境:ubuntu ...

  9. Django 笔记分享

    Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views), ...

随机推荐

  1. 第十七章、程序管理与 SELinux 初探 工作管理 (job control)

    工作管理 (job control) 这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工 ...

  2. Android实现弹出输入法时,顶部固定,中间部分上移的效果

    前言 最近做项目时碰到一个问题,在意见反馈里面,提交按钮写到顶部,当用户输入反馈意见或者邮箱手机号时,弹出的输入法会上移整个页面,导致提交按钮显示不了. 很明显,这样的界面是非常不友好的,找了一些资料 ...

  3. UVaLive4043 UVa1411 Ants 巨人与鬼

    题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...

  4. android-----JNI学习 helloworld

    (1)新建android工程 (2)添加NDK路径 (3)添加本地支持 给本地库起名 此时工程目录下会自动生成jni文件夹 此时Makefile也自动生成 LOCAL_PATH := $(call m ...

  5. Bootstrap-基于bootstrap的后台二级垂直菜单

    最近做一个后台的管理项目,用到了Twitter推出的bootstrap前端开发工具包,是一个基于css3/html5的框架.花周末时间,写了一个非常简单后台的菜单.首先,看一下菜单的结构: 预览地址  ...

  6. 在hibernate中使用SQL语句

  7. delphi TColorDialog

    TColorDialog 预览          实现过程 动态创建和使用颜色对话框 function ShowColorDlg:TColor;begin  with TColorDialog.Cre ...

  8. MySQL 5.6初始配置调整

    原文链接: What to tune in MySQL 5.6 after installation原文日期: 2013年09月17日翻译日期: 2014年06月01日翻译人员: 铁锚 随着 大量默认 ...

  9. [转] npm命令概述

    PS:问题,nvm找不到正确的下载server NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm ls-remote NVM_NODEJS_ORG_MI ...

  10. java获取计算机硬件参数

    public class HardWareUtils { /**   *   * 获取主板序列号   *   *   *   * @return   */ public static String g ...