DRY
對(duì)于不同數(shù)據(jù)源都應(yīng)該獨(dú)立存在,減少冗余的數(shù)據(jù)。
model就是你唯一可信的真實(shí)數(shù)據(jù)源。它包含了你所要存儲(chǔ)數(shù)據(jù)的必須字段和行為信息。Django遵循DRY 目的是讓你可以在一個(gè)地方定義你的數(shù)據(jù)模型,并以它來(lái)驅(qū)動(dòng)整個(gè)項(xiàng)目
簡(jiǎn)單來(lái)說(shuō)就是本地?cái)?shù)據(jù)
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
上面的代碼表明了每一個(gè)類(lèi)都是繼承models.Model,每一個(gè)類(lèi)都有數(shù)個(gè)對(duì)應(yīng)數(shù)據(jù)庫(kù)字段的類(lèi)成員變量組成。
每一個(gè)類(lèi)成員變量中必選參數(shù)和可選參數(shù),
可選參數(shù)
| 方法名 | 具體用法 |
|---|---|
| default | 默認(rèn)參數(shù) |
| primary_key | 主鍵,默認(rèn)是遞增數(shù)字 |
| max_length | 允許的最大長(zhǎng)度 |
| unique | 默認(rèn)是false。唯一值 |
| choices | 它是一個(gè)可迭代的二元組(例如,列表或是元組),用來(lái)給字段提供選擇項(xiàng)。 |
| blank | 默認(rèn)false,可以為空 |
model子類(lèi)的方法(部分)
| 方法名 | 具體用法 |
|---|---|
| AutoField | 必須設(shè)置為主鍵的field才能設(shè)置,int類(lèi)型。產(chǎn)生一個(gè)自增的主鍵,一個(gè)model中不能超過(guò)1個(gè)值 |
| BigAutoField | 自增長(zhǎng)的數(shù)據(jù)為8字節(jié)空間 |
| BigIntegerField | 返回8字節(jié)的整型類(lèi)型 |
| BinaryField | 二進(jìn)制類(lèi)型 |
| BooleanField | 布爾型和NullBooleanField有區(qū)別,true/false,本類(lèi)型不允許出現(xiàn)null |
| CharField | 定長(zhǎng)的字符串類(lèi)型,一般創(chuàng)建時(shí)寫(xiě)入max_length |
| CommaSeparatedIntegerField | 逗號(hào)分隔的整數(shù),考慮到數(shù)據(jù)庫(kù)的移植性,max_length參數(shù)應(yīng)該必選 |
| DateField | 對(duì)應(yīng)Python的datetime.date,額外的參數(shù):DateField.auto_now表示是否每次修改時(shí)改變時(shí)間,DateField.auto_now_add 表示是否創(chuàng)建時(shí)表示時(shí)間,一般來(lái)說(shuō)數(shù)據(jù)庫(kù)重要的表都要有這樣的字段記錄創(chuàng)建字段時(shí)間個(gè)最后一次改變的時(shí)間。 |
| TextField | 不定長(zhǎng)的字符串類(lèi)型 |