Django模型
一钻哩、基礎(chǔ)
- 每個(gè)模型都是一個(gè) Python 的類诫肠,這些類繼承自 django.db.models.Model。
- 模型類的每個(gè)屬性都相當(dāng)于一個(gè)數(shù)據(jù)庫的字段。
模型基本結(jié)構(gòu):
class 模型名(機(jī)器讀)(models.Model):
字段名(機(jī)器讀) = models.字段類型Field(參數(shù)設(shè)置)
def __str__(self):
return self.字段名
class Meta:
db_table = "表名(機(jī)器讀)"
verbose_name = '可讀模型名(人可讀)'
verbose_name_plural = '復(fù)數(shù)形式可讀模型名(人可讀)'
二厉亏、使用模型
1.應(yīng)用路由配置
工程目錄下urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('應(yīng)用名/', include('應(yīng)用名.urls')),
]
2.應(yīng)用配置
settings.py
INSTALLED_APPS = [
# 自定義
'應(yīng)用名.apps.應(yīng)用名(首字母大寫)Config',
# Django自帶
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 第三方
'widget_tweaks',
]
3.數(shù)據(jù)庫配置
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '數(shù)據(jù)庫名',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
4.數(shù)據(jù)庫遷移
完成應(yīng)用的模型代碼編寫后,可運(yùn)行以下命令激活模型:
...\> python manage.py makemigrations
...\> python manage.py migrate
三、字段
文檔:https://docs.djangoproject.com/zh-hans/2.2/ref/models/fields/
1.字段類型
(1)自增列
字段類型 | 描述 |
---|---|
AutoField | 自增列 |
BigAutoField | 大自增列,1 ~ 9223372036854775807 |
注意:自增列必須填入?yún)?shù) primary_key=True莱找。
如果model中沒有自增列,則自動(dòng)會(huì)創(chuàng)建一個(gè)列名為id的自增列嗜桌。
(2)數(shù)值型
字段類型 | 描述 |
---|---|
BinaryField | 二進(jìn)制型列 |
SmallIntegerField | 小整數(shù)列奥溺,-32768 ~ 32767 |
PositiveSmallIntegerField | 正小整數(shù)列,0 ~ 32767 |
IntegerField | 整數(shù)列(有符號(hào)的)骨宠,-2147483648 ~ 2147483647 |
PositiveIntegerField | 正整數(shù)列谚赎,0 ~ 2147483647 |
BigIntegerField | 長整數(shù)列(有符號(hào)的) ,-9223372036854775808 ~ 9223372036854775807 |
BooleanField | 布爾型列诱篷,不允許為空 |
NullBooleanField | 布爾型列壶唤,允許為空 |
FloatField | 浮點(diǎn)型列 |
DecimalField | 十進(jìn)制小數(shù)列(max_digits:總長度,decimal_places:小數(shù)位數(shù)) |
(3)字符串型
字段類型 | 描述 |
---|---|
CharField | 可變長字符型列(varchar)棕所,必須提供max_length參數(shù)闸盔, max_length表示字符長度 |
TextField | 長文本型列(longtext) |
(4)日期型
字段類型 | 描述 |
---|---|
DateField | 日期型列,YYYY-MM-DD |
TimeField | 時(shí)間型列琳省,HH:MM[:ss[.uuuuuu]] |
DateTimeField | 日期時(shí)間型列迎吵,YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] |
DurationField | 時(shí)間間隔型列 |
(5)其他類型
字段類型 | 描述 |
---|---|
EmailField | 郵箱列,Django Admin以及ModelForm中提供驗(yàn)證機(jī)制 |
IPAddressField | IPV4地址列针贬,Django Admin以及ModelForm中提供驗(yàn)證IPV4 機(jī)制 |
GenericIPAddressField | IP地址列击费,Django Admin以及ModelForm中提供Ipv4和Ipv6驗(yàn)證機(jī)制 |
(6)Django字段數(shù)據(jù)庫字段對(duì)照
'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)',
2.字段選項(xiàng)
字段參數(shù) | 描述 |
---|---|
null | 數(shù)據(jù)庫中字段是否可以為空(null=True) |
db_column | 數(shù)據(jù)庫中字段的列名(db_column="test") |
db_tablespace | 指定這個(gè)模型對(duì)應(yīng)的數(shù)據(jù)庫表放在哪個(gè)數(shù)據(jù)庫表空間 |
default | 數(shù)據(jù)庫中字段的默認(rèn)值 |
primary_key | 數(shù)據(jù)庫中字段是否為主鍵(primary_key=True) |
db_index | 數(shù)據(jù)庫中字段是否可以建立索引(db_index=True) |
unique | 數(shù)據(jù)庫中字段是否可以建立唯一索引(unique=True) |
unique_for_date | 數(shù)據(jù)庫中字段【日期】部分是否可以建立唯一索引 |
unique_for_month | 數(shù)據(jù)庫中字段【月】部分是否可以建立唯一索引 |
unique_for_year | 數(shù)據(jù)庫中字段【年】部分是否可以建立唯一索引 |
auto_now | 更新時(shí)自動(dòng)更新當(dāng)前時(shí)間 |
auto_now_add | 創(chuàng)建時(shí)自動(dòng)更新當(dāng)前時(shí)間 |
verbose_name | Admin中顯示的字段名稱 |
blank | Admin中是否允許用戶輸入為空 表單提交時(shí)可以為空 |
editable | Admin中是否可以編輯 |
help_text | Admin中該字段的提示信息 |
choices | Admin中顯示選擇框的內(nèi)容,用不變動(dòng)的數(shù)據(jù)放在內(nèi)存中從而避免跨表操作 |
四桦他、Meta選項(xiàng)
元數(shù)據(jù) | 描述 |
---|---|
app_label | 指定該模型屬于哪一個(gè)應(yīng)用 |
db_table | 表名(機(jī)器讀) |
db_tablespace | 定義數(shù)據(jù)庫表空間的名字 |
get_latest_by | 指定lastest()方法的參照字段 |
managed | 指定是否根據(jù)模型類生成映射的數(shù)據(jù)庫表(默認(rèn)為True) |
order_with_respect_to | 按照給定的字段把這個(gè)對(duì)象標(biāo)記為”可排序的“ |
ordering | 指定排序的參照字段 |
permissions | 設(shè)置創(chuàng)建對(duì)象時(shí)權(quán)限表中額外的權(quán)限 |
unique_together | 設(shè)置的不重復(fù)的字段組合 |
index_together | 設(shè)置帶有索引的字段組合 |
abstract | 指定該模型是否作為基類用于被繼承 |
proxy | 指定該模型子類的另一個(gè)模型是否會(huì)被視為代理模型 |
verbose_name | 可讀模型名(人可讀) |
verbose_name_plural | 復(fù)數(shù)形式可讀模型名(人可讀) |