最近在博客园看来越来越多的关于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. C语言学习_include<>与include""的区别

    经常会遇到两种include引用头文件的情况,其实区别很简单,如下: 一.#include< > #include< > 引用的是编译器的类库路径里面的头文件. 假如你编译器定 ...

  2. Linux下安装MySQL5.6

    传送门:http://www.jianshu.com/p/f4a98a905011 字数802 阅读164 评论0 喜欢4 环境:1.操作系统:CentOS release 6.8 (Final)2. ...

  3. Cookie及App登陆的原理

    1.Cookie Cookie意为"甜饼",是由W3C组织提出的.目前Cookie已经成为标准.由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给 ...

  4. 原生JavaScript的省市县三级联动

    三级联动是我们写表单时必不可少的,比如在写收货地址时,就用到他了,最近在看原生JavaScript,从基础写起,待完善,以后再写个jquery版的. <!DOCTYPE html> < ...

  5. 用python正则表达式提取字符串

    在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种 ...

  6. DevExpress控件 GridControl 单元格编辑 回车

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. jquery 手机 图片切换 例子 网址

    http://m.swdhy.com/page/ShowCompany.aspx?cid=388481&name=山东潍坊金城服装有限公司

  8. iOS-UITableCell详情

    iOS-UITableCell详情 表示UITableViewCell风格的常量有: UITableViewCellStyleDefault UITableViewCellStyleSubtitle ...

  9. ios中图片的绘画和截图

    ios中图片的绘画和截图 CGImageCreateWithImageInRect截图和UIGraphicsGetImageFromCurrentImageContext绘画图片 使用CGImageC ...

  10. linux的openfire运行日志配置经历

    openfire的日志可以通过/usr/openfire/lib/log4j.xml(与openfire的安装目录有关,我的openfire是安装在/usr/openfire/)的xml配置文件进行设 ...