實例:
作者模型: 一個作者有姓名
作者詳情模型:把作者的詳情放到詳情表,包含性別 email地址和出生日期,作者詳情模型和作者模型是一對一關(guān)系(oneToOneField)
出版商模型:出版商有名稱 地址 所在城市 省 國家 網(wǎng)站
書籍模型:書籍有書名 出版日期。一本書可能會有多個作者,一個作者也可以寫多本書,所以作者和書籍的關(guān)系是多對多的關(guān)聯(lián)關(guān)系(many-to-many),一本書只應(yīng)該由一個出版商出版,所以出版商和書籍是一對多的關(guān)聯(lián)關(guān)系(one-to-many)也被稱作外鍵(ForenignKey)
class Publisher(models.Model):
name = models.CharField(max_length=30, verbose_name="名稱")
address = models.CharField("地址", max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Author(models.Model):
name = models.CharField(max_length=30)
class AuthorDetail(models.Model):
sex = models.BooleanField(max_length=1, choices=((0, '男'), (1, '女'),))
email = models.EmailField()
address = models.CharField(max_length=50)
birthday = models.DateField()
author = models.OneToOneField(Author)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
在models.py
里定義好之后只需要執(zhí)行 makemigrations
生成數(shù)據(jù)庫同步腳本 和migrate
來同步數(shù)據(jù)庫即可
每個數(shù)據(jù)模型都是django.db.models.Model的子類。它的父類Model包含了所有必要的和數(shù)據(jù)庫交互的方法,并提供了一個簡潔漂亮的定義數(shù)據(jù)庫字段的API
每個模型相當于單個數(shù)據(jù)庫的表(命名結(jié)構(gòu)為app的名字_模型的小寫)(這條規(guī)則的例外情況是多對多關(guān)系,多對多關(guān)系的時候會多生成一張表) ,每個屬性也是這個表中的一個字段。屬性名就是字段名,它的類型(例如charField)相當于數(shù)據(jù)庫的字段類型(例如varchar).
模型間的三種關(guān)系 ***********
- OneToOne 會添加一個 模型名_主鍵的字段
- OneToMany 即ForenignKey 會創(chuàng)建一個模型名_主鍵的字段
- ManyToMany 會創(chuàng)建一張 app名自己模型被關(guān)聯(lián)模型 的表 里面的字段 id, 兩個表的主鍵_id 這三個字段
- BooleanField 布爾
- CharField 字符串類型
- DateField 日期
- DateTimeField 日期時間
- DecimalField (精確的)小數(shù)字段 ***********
- EmailField 郵件地址
- FileField 文件字段(保存和處理上傳的文件)
- FloatField 浮點型小數(shù)
- ImageField 圖片字段(保存和處理上傳的圖片)
- IntegerField 整數(shù)
- BigIntegerField 大整數(shù)
- SmallIntegerField 小整數(shù)
- IPAddressField IP字段
- TextField 文本字段
- URLField 網(wǎng)頁地址字段
- null(null=True|False) 數(shù)據(jù)庫字段的設(shè)置是否為空(數(shù)據(jù)庫驗證)
- blank(null=True|False)字段的設(shè)置是否為空(django會進行驗證 表單驗證)
- choices 輕量級的配置字段可選屬性的定義 可以以元祖的形式給出字段的說明 **************
- default 默認值
- help_text 字段文字幫助
- primart_key(=True|False) 一般不需要進行定義是否主鍵,django會自動增加一個默認主鍵 id=models.AutoField(Primary_key=True)
- unique 是否唯一 對于數(shù)據(jù)表而言
- verbose_name 字段的詳細名稱 如果不指定該屬性,默認使用字段的屬性名稱
在模型層的 models 下的字段類型(Field type)中有詳細介紹