3.models.py

實例:

作者模型: 一個作者有姓名
作者詳情模型:把作者的詳情放到詳情表,包含性別 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)中有詳細介紹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容