在django中, 所有的數(shù)據(jù)庫(kù)操作都是面向?qū)ο缶幊?,基本上看不到操作?shù)據(jù)庫(kù)的sql語(yǔ)句,方便快捷是django開(kāi)發(fā)的一大特點(diǎn)
定義屬性
- 定義屬性需要字段類(lèi)型
- 字段類(lèi)型被定義在django.db.models.fields目錄下,為了方便使用,被導(dǎo)入到django.db.models中
- 使用方式:
1.導(dǎo)入 from django.db import models
2.通過(guò)models.Field創(chuàng)建字段類(lèi)型的對(duì)象,賦值給屬性
字段類(lèi)型
- AutoFiled :根據(jù)實(shí)際id自動(dòng)增長(zhǎng)的字段類(lèi)型。如果不指定該類(lèi)型,則自動(dòng)添加一個(gè)主鍵字段到模型類(lèi)中
- BooleanFiled:類(lèi)似于c/c++等其他語(yǔ)言中的bool類(lèi)型,只能為true或false
- NullBooleanFiled:它可以有三個(gè)取值, null、true、false
- CharField:字符串
- TextField :大文本字段,一般超過(guò)4000行
- IntegerFiled:整數(shù)字段
- DecimalFiled(max_digits=None,decimal_place=None)
max_digits:位數(shù)總數(shù)
decimal_place:小數(shù)點(diǎn)后面的位數(shù) - FloatField:python實(shí)例表示的浮點(diǎn)數(shù)
- DateFiled(auto_now = false, auto_now_add = false):使用python中的datetime.date實(shí)例表示的日期
auto_now:默認(rèn)為false, 每次保存對(duì)象時(shí), 自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間。用于最后一次修改的“時(shí)間戳”
auto_now_add:當(dāng)對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間,用于創(chuàng)建時(shí)間戳,它總是使用當(dāng)前時(shí)間,默認(rèn)為false
auto_now、auto_now_add 和默認(rèn)值之間是互斥的,它們之間任意組合將發(fā)生錯(cuò)誤 - TimeField:使用python的datetime.time實(shí)例表示的時(shí)間,參數(shù)同DateFiled
- DateTimeField:使用python的datetime。datetime實(shí)例表示的時(shí)間,參數(shù)同DateFiled
- FileFiled:上傳文件的字段
- ImageFiled:繼承了FileFiled的所有屬性和方法, 但對(duì)上傳的文件進(jìn)行校驗(yàn),確保它是個(gè)有效的image文件
字段選項(xiàng)
- 通過(guò)字段選項(xiàng)可以實(shí)現(xiàn)對(duì)字段的約束
- 在字段對(duì)象中通過(guò)關(guān)鍵字參數(shù)指定
- null:如果為true, django將控制以null存儲(chǔ)到數(shù)據(jù)庫(kù)中,默認(rèn)為false(null是數(shù)據(jù)庫(kù)的概念)
- blank:如果為true, 表示該字段允許為空白,默認(rèn)為false(blank是表單驗(yàn)證范疇)
- db_column:字段的名稱(chēng) ,如果未指定,則使用屬性的名稱(chēng)
- db_index:如果為true, 則在表中會(huì)為該字段常見(jiàn)索引
- default:默認(rèn)值
- primary_key:如果為true, 則該字段為成為該表的主鍵
- unique:如果為true, 則該字段在表中必須有唯一值
關(guān)系
- 關(guān)系的類(lèi)型包括:
ForeignKey: 外鍵, 一對(duì)多, 將字段定義在多的那一邊
ManyToManyField:多對(duì)多,將字段定義在兩端中
OneToOneField:一對(duì)一,將字段定義在任意一端中 - 用一訪問(wèn)多:
bookinfo.heroinfo_set - 用一訪問(wèn)一:
heroinfo.bookinfo - 訪問(wèn)id:對(duì)象.屬性_id
heroinfo.bok_id - 示例
class BookInfo(models.Model):
htitle = models.CharFiled(max_length = 20)
bread = models. IntegerFiled()
isDelete = models.BooleanField()
class HeroInfo(mdels.Model):
hname = models.CharField(max_length = 20)
hgender = models.BooleanField()
isDelete = models.BooleanField()
book = models.ForeignKey('BookInfo')
元選項(xiàng)
- 在模型類(lèi)中定義Meat,用于定義元信息
- 元信息db_table, 用于定義數(shù)據(jù)表的默認(rèn)名稱(chēng), 推薦使用小寫(xiě)字母, 數(shù)據(jù)表的默認(rèn)名稱(chēng)
<app_name><model_name> - ordering: 對(duì)象的默認(rèn)排序選字段
class Man(models.Model):
class Meta:
ordering = ['id']
- 字符串前面加-表倒敘
class BookInfo(models.Model):
class Meta:
ordering = ['-id']