Django - 模型(Models)

模型(Model)

  • 模型是提供數據信息的數據庫接口。
  • 模型是數據的惟一的,肯定的信息源。它包含你所儲存數據的必要字段和行爲。
  • 一般,每一個模型對應數據庫中惟一的一張表。每一個模型的實例對應數據表中的一條記錄
  • 模型說明:
    • 每一個模型都是一個Python的類,每一個模型都是django.db.models.Model的子類。
    • 每個模型屬性都表明數據庫中的一個表。
    • 經過全部這一切,Django的爲你提供一個自動生成的數據庫訪問API;

1.ORM框架

  • ORM(對象關係映射)即對象關係映射,它容許你使用類和對象對數據庫進行交互(使用類和對象和使用SQL同樣且更方便各類操做)。
  • ORM
Object Relationship Mapping
  對象    關係         映射
  • 三大特徵:
  1. 表到類的映射
  2. 數據類型的映射
  3. 關係映射

2.模型示例(操做步驟)

(1)添加一個應用程序  $ python3 manage.py startapp 應用程序名python

(2)添加模型類並註冊應用程序(假設建立一個bookstore的應用程序) mysql

# file : bookstore/models.py
from django.db import models

class Book(models.Model):
    title = models.CharField("書名", max_length=50, default='')
    price = models.DecimalField('訂價', max_digits=7, decimal_places=2, default=0.0)

############

# file : setting.py
INSTALLED_APPS = [
    ...
    'bookstore',
]

(3)遷移生成腳本文件bookstore/migrations/0001_initial.py並進行遷移git

$ python3 manage.py makemigrations
$ python3 manage.py migrate 
#終端操做
$ python3 manage.py makemigrations
Migrations for 'bookstore':
bookstore/migrations/0001_initial.py
    - Create model Book
$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, bookstore, contenttypes, sessions
Running migrations:
Applying bookstore.0001_initial... OK

(4)查看數據表(是否遷移成功)web

$ mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mygoods            |
| mysql              |
| mywebdb            |
| onlybuyp           |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
8 rows in set (0.00 sec)

mysql> use mywebdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------------+
| Tables_in_mywebdb          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| bookstore_book             |  <<== 新加表
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)

mysql> desc bookstore_book;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| title | varchar(50)  | NO   |     | NULL    |                |
| price | decimal(7,2) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
查看數據庫 

(5)表bookstore_book即爲模型Book類對應的數據表sql

  • d爲主鍵,當設定主鍵時會自動添加id字段爲主鍵
  • 若是更新模型類models.py中的內容時須要運行makemigrations和遷移子命名來更新和同步數據庫
  • 在開發階段若是同步數據庫出錯。用sql> drop database 數據庫名刪除數據庫後從新遷移數據庫
  • 在xxx_app / migrations / *。py下的文件是自動生成的遷移腳本文件,能夠手動刪除且在下一次遷移時自動生成

3.編寫模型類模型

模型類需繼承自django.db.models.Model數據庫

(1)模型的語法規範django

from django.db import models
class CLASSNAME(models.Model):
    NAME = models.FIELD_TYPE(FIELD_OPTIONS)

(2)班級名稱編程

  • 實體類名,表名組成一部分,建議類名首字母大寫
  • 默認表名組成規範:
    • 應用名稱_className

(3)名稱bash

  • 類屬性名,映射回數據庫就是字段名

(4)FIELD_TYPEsession

  • 字段類型:映射到表中的字段的類型

4.FIELD_TYPE類型及含義

(1)BooleanField()

  • 數據庫類型:TINYINT(1)
  • 編程語言中:使用真或假來表示值
  • 在數據庫中:使用1或0來表示具體的值

(2)CharField()

  • 數據庫類型:V​​ARCHAR
  • 注意:必需要指定MAX_LENGTH參數值 

(3)DateField()

  • 數據庫類型:日期
  • 做用:表示日期
  • 編程語言中:使用字符串來表示具體值
  • 參數:
    • DateField.auto_now:每次保存對象時,自動設置該字段爲當前時間(取值:是/否)。
    • DateField.auto_now_add:當對象第一次被建立時自動設置當前時間(取值:真/假)。
    • DateField.default:設置當前時間(取值:字符串格式時間如:'2019-6-1')。
    • 以上三個參數只能多選一

(4)DateTimeField字段()

  • 數據庫類型:日期時間(6)
  • 做用:表示日期和時間
  • auto_now_add =真

(5)DecimalField()

  • 數據庫類型:十進制(X,Y) 
  • 編程語言中:使用小數表示該列的值
  • 在數據庫中:使用小數
  • 參數:
    • DecimalField.max_digits:位數總數,包括小數點後的位數。該值必須大於等於decimal_places。
    • DecimalField.decimal_places:小數點後的數字數量
money=models.DecimalField(
    max_digits=7,
    decimal_places=2,
    default=0.0
)

(6)FloatField()

  • 數據庫類型:雙
  • 編程語言中和數據庫中都使用小數表示值

(7)EmailField()

  • 數據庫類型:V​​ARCHAR
  • 編程語言和數據庫中使用字符串

(8)IntegerField() 

  • 數據庫類型:INT
  • 編程語言和數據庫中使用整數 

(9)URLField()

  • 數據庫類型:V​​ARCHAR(200)
  • 編程語言和數據庫中使用字符串

(10)ImageField的()

  • 數據庫類型:V​​ARCHAR(100)
  • 做用:在數據庫中爲了保存圖片的路徑
  • 編程語言和數據庫中使用字符串
  • upload_to:指定圖片的上傳路徑在後臺上傳時會自動的將文件保存在指定的目錄下
image=models.ImageField(
    upload_to="static/images"
)

(11)文本域()

  • 數據庫類型:LONGTEXT
  • 做用:表示不定長的字符數據

文檔參考https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types

5.字段選項

FIELD_OPTIONS

  字段選項,指定建立的列的額外的信息field_options

  容許出現多個字段選項,多個選項之間使用,隔開 

(1)首要的關鍵:primary_key=True

  若是設置爲True,則表示該列爲主鍵,若是指定一個字段爲主鍵,則此數庫表不會建立ID字段

(2)空白:blank=Flase

  設置爲真時,字段能夠爲空。設置爲False時,字段是必須填寫的。字符型字段CharField和TextField是用空字符串來存儲空值的。默認值是False。

(3)空值:null=Ture

  若是設置爲True,則表示該列值容許爲空。日期型,時間型和數字型字段不接受空字符串。因此設置IntegerField,DateTimeField字段型字段能夠爲空時,須要將空(blank),空(null)均設爲真(True)。

  默認爲False,若是此選項爲false,建議加入默認(default)選項來設置默認值

(4)默認:delault=''

  設置所在列的默認值,若是字段選項空=假建議添加此項

(5)db_index

  若是設置爲True,則表示爲該列增長索引

(6)獨特unique

  若是設置爲True,則表示該字段在數據庫中的值必須是惟一(不能重複出現的)

(7)db_column

  指定列的名稱,若是不指定的話則採用屬性名做爲列名

(8)verbose_name

  設置此字段在管理界面上的顯示名稱。

# 建立一個屬性,表示用戶名稱,長度30個字符,必須是惟一的,不能爲空,添加索引

name = models.CharField(max_length=30, unique=True, 
null=False, db_index=True)

文檔參見:https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-options

相關文章
相關標籤/搜索