Django Model 模型
Django Model層是Django的數(shù)據(jù)模型層,每一個(gè)Model類(lèi)就是數(shù)據(jù)庫(kù)中的一張表;
我們需要注意下面幾點(diǎn):
model一般都是定義在不同的APP的models.py模塊文件中,可以是一個(gè),也可以是多個(gè);
不同model之間可以相互關(guān)聯(lián),類(lèi)似表直接的關(guān)聯(lián);
APP中一旦定義了model,必須將此APP添加到settings文件中;
且一定要記得運(yùn)行makemigrations檢查model更新和migrate同步數(shù)據(jù)模型在數(shù)據(jù)庫(kù)中建表(這兩個(gè)操作大家記得在哪里操作嗎,之前的文章有寫(xiě),快捷鍵就是Alt+Ctrl+R);
如何定義一個(gè)數(shù)據(jù)model模型
我們一起來(lái)看一下如何定義一個(gè)數(shù)據(jù)model模型,具體有哪些操作:
- 首先我們需要在APP中的models.py創(chuàng)建Model,我們用courses APP來(lái)操作一下
from django.db import models
class Course(models.Model):
name = models.CharField(max_length=50, verbose_name="課程名")
desc = models.CharField(max_length=300, verbose_name=u"課程描述")
degree = models.CharField(choices=(("primary", '初級(jí)'), ("middle","中級(jí)"), ("junior", "高級(jí)")), max_length=10, verbose_name='課程難度')
students = models.IntegerField(default=0, verbose_name="學(xué)習(xí)人數(shù)")
# 需要安裝pillow,圖片處理庫(kù)
image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="課程圖片", max_length=100)
class Meta:
verbose_name = "課程"
verbose_name_plural = verbose_name
我們知道每一個(gè)Model類(lèi)就是數(shù)據(jù)庫(kù)中的一張表,那這段代碼中我們定義了五個(gè)字段,代表相應(yīng)的數(shù)據(jù)庫(kù)表中也有五個(gè)字段,大家注意一下字段的類(lèi)型(等一下我們?cè)賮?lái)講解關(guān)于字段類(lèi)型),
這個(gè)表其實(shí)就想當(dāng)于以下代碼:
create table courses_course(
id int not null primary key,
name varchar(50),
desc varchar(300),
degree varchar(10),
students int(11),
image varchar(100),
);
然后我們需要在數(shù)據(jù)庫(kù)中生成數(shù)據(jù)表,執(zhí)行makemigrations在app下建立migrations目錄,并記錄下所有關(guān)于models.py的改動(dòng),比如0001_initial.py, 但是這個(gè)改動(dòng)還沒(méi)有作用到數(shù)據(jù)庫(kù)文件,接著執(zhí)行migrate將改動(dòng)作用到數(shù)據(jù)庫(kù)文件,比如產(chǎn)生table之類(lèi);
最后可以登錄mysql數(shù)據(jù)庫(kù)檢查表是否創(chuàng)建成功,大家還記得怎么登錄mysql數(shù)據(jù)庫(kù)嗎?
先開(kāi)啟mysql數(shù)據(jù)庫(kù),我是用的Winginx中的mysql數(shù)據(jù)庫(kù),所以我只需要在Winginx打開(kāi)就好,然后在命令行工具中輸入:
mysql -ufirst_project -p123456
我的用戶(hù)名是first_project ,密碼是123456
然后我們?cè)跀?shù)據(jù)庫(kù)中查看表是否成功
use First_Project # 我的數(shù)據(jù)庫(kù)是First_Project
show tables; # 查看所有表

我們是不是能看到有一個(gè)courses_course表呀,然后輸入命令行
desc courses_course;
Field 字段類(lèi)型
IntegerField:整型字段;
CharField:字符型字段,該字段類(lèi)型有一個(gè)必需參數(shù):max_length 在數(shù)據(jù)庫(kù)水平限定了字符串最大長(zhǎng)度;
ImageField:圖像字段,能自動(dòng)驗(yàn)證上傳的對(duì)象是否為合法的圖像;
FloatField:浮點(diǎn)字段;
AutoField:根據(jù)已有id自增長(zhǎng)的整型唯字段,一般每個(gè)model類(lèi)不需設(shè)置該字段,因?yàn)閐jango會(huì)為每個(gè)model自動(dòng)設(shè)置;
我這里列舉了幾個(gè)比較常用的字段類(lèi)型,大家如果想知道更多可以查看Django官方文檔:https://docs.djangoproject.com/en/2.1/ref/models/fields/