定义模型

将数据库表定义成类,集成models.Model

from django.db import models
# Create your models here.
class Author(models.Model):
    name=models.CharField(max_length=100)

django会自动生成id字段作为主键,如果不定义主键的话

2,使用模型

将使用manage.py startapp XXX 创建的应用加入到setting下的INSTALLED_APPS下面,注意它为元组,别忘记后面的逗号

确保运行命令manage.py migrate,可以事先使用manage.py makemigrations 给应用生成迁移脚本。

3,字段

字段类型

模型中的每一个字段是field子类的实例

CharField和TextField字段都是最基本的保存文本的字段,其中Charfield是指定固定长度的,另一个是无限长的

DataField和DatatimeField字段是保存时间的字段

FileField是保存文件路径的字段

也可以自己自定义字段类型

字段选项

Null,如果为True,则将数据库中空值保存为NULL,默认为False

Blank,如果为True,则表单的验证允许为空值,默认为False,他是表单输入验证范畴的

Choice,由二维元组提供一些选项,设置了choice,表单是一个选择框,而不是文本框

Default,字段的默认值,可以是一个值或者可调用对象

Help_text,表单部件额外显示的帮助信息

Primary_key,如果为True,则该字段为主键,如果表中没有设置该值,django自动生成Id字段为主键

Unique,如果为True,这个数据字段在整个表中都是唯一的

关系

Django提供了最常见的三种数据库关系:多对一,多对多,一对一

多对一关系

Django使用 django.db.models.ForeignKey 定义多对一关系,和使用其他字段类型一样,在模型中把它作为类的属性包含进来

class Author(models.Model):
    name=models.CharField(max_length=100)

class Book(models.Model):
    title=models.CharField(max_length=100)
    author=models.ForeignKey(Author)  #定义了多对一的关系
    length=models.IntegerField()

若要创建一个递归的关联 —— 对象与自己具有多对一的关系 —— 请使用models.ForeignKey('self')。

如果你需要关联到一个还没有定义的模型,你可以使用模型的名字而不用模型对象本身:

from django.db import models
class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')
class Manufacturer(models.Model):
    # ...
Pass

多对多关系

ManyToManyField 用来定义多对多关系,用法和其他Field 字段类型一样:在模型中做为一个类属性包含进来。

在哪个模型中使用ManytoManyField并不重要,在两个模型中任选一个即可,不用两个模型都设置

class Book(models.Model):
    title=models.CharField(max_length=100)
    author=models.ForeignKey(Author)
    length=models.IntegerField() class classify(models.Model):
    name=models.CharField(max_length=100)
    books=models.ManyToManyField(Book) #定义多对多的关系
也可以按照数据库sql定义多对多关系的形式,在定义另一个模型,对两个模型设置外键
 

一对一关系

OneToOneField用来定义一对一关系。 用法和其他字段类型一样:在模型里面做为类属性包含进来。

class Author(models.Model):
    name=models.CharField(max_length=100) class Authorinfo(models.Model):
    phone=models.CharField(max_length=20)
    add=models.CharField(max_length=300)
    sex=models.CharField(choices=sex_choice)
    author=models.OneToOneField(Author)

模型方法

可以在模型上定义自定义的方法来给你的对象添加自定义的“底层”功能。Manager 方法用于“表范围”的事务,模型的方法应该着眼于特定的模型实例。

如def __str__(self) #适用于python3

Return xxx

对于python2使用

Def __unicode__(self)

Return xxx

多表集成

Django的model中提供表之间的集成关系,每一层级下面的models是一个完整的model。在父表中的字段在字表中都有效,只是没有保存在字表中

具体的用法参考官网

django之models模块使用的更多相关文章

  1. django的models模块查询方法

    假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...

  2. Django之models模块

    一.字段 1. AutoField(Field) int自增列,必须填入参数 primary_key=True 2.BigAutoField(AutoField) bigint自增列,必须填入参数 p ...

  3. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  4. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  5. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  6. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  7. 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...

  8. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  9. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

随机推荐

  1. java中==与equals

    == ==可用于比较基本类型与引用类型,对于基本类型变量比较的是其存储的值是否相等,对于引用类型则比较的是其是否指向同一个对象. 如: int a = 10; int b = 20; double d ...

  2. deque/defaultdict/orderedict/collections.namedtuple()/collections.ChainMap() 笔记

    关于deque的使用 collections.deque([list[, max_length]]) # 不限定长度,可随意添加没有上限 >>> from collections i ...

  3. win764位系统上让32位程序能申请到4GB内存方法

    win764位系统上让32位程序能申请到4GB内存方法. 2016年09月18日 18:36:26 阅读数:1550 最近测试一个32位程序总是在1.2G左右内存时崩溃,怀疑是内存申请失败,本身32位 ...

  4. sublime text2+Ctags+Cscope替代Source Insight

    说明:以Windows系统下查看C++代码为例.因为Source Insight(以下简称SI)是收费软件,且界面丑陋,所以考虑其替代方案,发现Sublime Text3(以下简称ST3) + Cta ...

  5. Python多版本共存virtualenv配置

    virtualenv 前提是已经安装好了python.我的ubuntu是自带了python2.7和python3.6 安装vrtualenv sudo apt-get install python-v ...

  6. Multiresolution Analysis(多分辨率分析)

    [注意:本文中所有的傅里叶变换和反变换均含对称因子$\frac{1}{\sqrt{2\pi}}$,且$z=e^{-ik\omega}$] 1. 多分辨率分析 1.1 概念 多分辨率分析指的是一系列$L ...

  7. Android Studio 小技巧

    请参照http://blog.csdn.net/jdsjlzx/article/details/50689047 个人认为较有用: 30

  8. 阿里云kubernetes被minerd挖矿入侵

    阿里云kubernetes被minerd挖矿入侵 # kubectl get rc mysql1 -o yaml apiVersion: v1 kind: ReplicationController ...

  9. Java工程师 必须掌握的知识点

    Web核心:XML.HTTP及Tomcat.Servlet.request与response.cookie与session.jsp技术.jdbc高级.Ajax开发.Filter/Listener高级. ...

  10. Linux系统安装(centos6.8)符破解码

    1.安装 VMware VMware 是一个虚拟 PC 的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的 PC,我们可以在上面构造出一个或多个别的系统,以此来实现在一台机器上 ...