Django_Model详解

Models

model是对于信息的一种模型封装与定义。它包含了你要存储的必要字段和操作数据的方法。一句话概括就是,每个模型映射了一张数据表。
基本概念:

  • 每个model都是继承于django.db.models.Model 的Python类。

  • model的每一个属性对应数据表中的一个字段。

  • 通过所有的这些,Django提供了一个自动化生成访问数据库的API。

简单实例

这个例子定义了Person ,并给它赋予了first_namelast_name:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

其中first_namelast_name 是model的字段。如你所见,每一个字段被定义为class类的一个属性,而每个属性对应着数据库的一列。

上面的创建Person ,model模型的过程用SQL语句翻译过来如下:

CREATE TABLE myapp_person(
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

下面是一些需要注意的问题:

  • 数据表的名字,myapp_person,自动继承一些model的metadata设定,但是同时支持自定义。

  • id字段是自动添加的,但是它同样可以自定义。

  • CREATE TABLE这个SQL语句在这个例子中由PostgreSQL来实现,

使用models

一旦你定义好了你的模型,你需要告诉Django你将要使用这些models。这就需要秀修改工程目录下的settings.py文件。假设你的model定义在了app名为myapp的models.py 文件中,为了使得Django识别出你要使用这个model,你就需要在settings.py中设定如下:

INSTALLED_APPS = [
    #...
    'myapp',
    #...
]

当你添加新的APP到INSTALLED_APPS中时。需要运行命令python manage.py migrate使设置生效。可供选择的是为了使用git等代码管理软件,你可以先运行python manage.py makemigrations

字段

model最重要的部分而且也是model所需的基础部分是它定义的数据库字段的集合。字段由类的属性来定义。需要注意一点,不要使用和models API冲突的名字来命名字段例如clean,save或者delete

例子:

from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max)length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician,on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    release_date = models.DataField()
    num_stars = models.IntegerField()

字段类型

你模型中的每一个字段应该是一个Field类的实例。Django使用字段类来决定一些事:

  • 列的类型,就是告诉数据库要存储的数据类型是什么。

  • 默认的HTML插件 ,用以渲染表单字段(例如,