Django項目創建數據模型(Model)


  Django是通過Model來操作數據庫的,無論我們使用的是mysql還是sqlite3,Django都會幫我們自動生成相應數據庫類型的sql語句,所以我們不需要關注sql語句和類型,Django會幫我們自動生成,我們只需要會寫model就可以了。

  Django根據代碼中編寫的類來自動生成數據庫表。我們寫的類表示數據庫的表。

  基本原則:

  • 每個模型在Django中表現為一個Python類
  • 每個模型都是繼承自django.db.models.Model,都是django.db.models.Model的子類
  • 模型里的每個類都代表着數據庫中的一個表
  • 模型的每個字段(屬性)都代表着數據庫表中的某一列
  • Django會自動生成訪問數據庫的API

 

下面我們以博客項目為例,經過分析,完成博客項目我們需要存儲六種數據:文章分類、文章、文章標簽、幻燈圖、推薦位、友情鏈接。每種數據一個表。

from django.db import models
from django.contrib.auth.models import User 
#導入Django自帶用戶模塊

# 文章分類
class Category(models.Model):
    name = models.CharField('博客分類', max_length=100)
    index = models.IntegerField(default=999, verbose_name='分類排序')

    class Meta:
        verbose_name = '博客分類'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#文章標簽
class Tag(models.Model):
    name = models.CharField('文章標簽',max_length=100)
    class Meta:
        verbose_name = '文章標簽'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#推薦位
class Tui(models.Model):
    name = models.CharField('推薦位',max_length=100)

    class Meta:
        verbose_name = '推薦位'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

#文章
class Article(models.Model):
    title = models.CharField('標題', max_length=70)
    excerpt = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name='分類', blank=True, null=True)
     #使用外鍵關聯分類表與分類是一對多關系
    tags = models.ManyToManyField(Tag,verbose_name='標簽', blank=True)
    #使用外鍵關聯標簽表與標簽是多對多關系
    img = models.ImageField(upload_to='article_img/%Y/%m/%d/', verbose_name='文章圖片', blank=True, null=True)
    body = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
     """
     文章作者,這里User是從django.contrib.auth.models導入的。
     這里我們通過 ForeignKey 把文章和 User 關聯了起來。
     """
    views = models.PositiveIntegerField('閱讀量', default=0)
    tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING, verbose_name='推薦位', blank=True, null=True)
    
    created_time = models.DateTimeField('發布時間', auto_now_add=True)
    modified_time = models.DateTimeField('修改時間', auto_now=True)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'

    def __str__(self):
        return self.title

#Banner
class Banner(models.Model):
    text_info = models.CharField('標題', max_length=50, default='')
    img = models.ImageField('輪播圖', upload_to='banner/')
    link_url = models.URLField('圖片鏈接', max_length=100)
    is_active = models.BooleanField('是否是active', default=False)

    def __str__(self):
        return self.text_info

    class Meta:
        verbose_name = '輪播圖'
        verbose_name_plural = '輪播圖'


#友情鏈接
class Link(models.Model):
    name = models.CharField('鏈接名稱', max_length=20)
    linkurl = models.URLField('網址',max_length=100)

    def __str__(self):
        return self.name
    class Meta:
        verbose_name = '友情鏈接'
        verbose_name_plural = '友情鏈接'

其中,文章與分類是一對多的關系,文章與標簽是多對多的關系,文章與作者是一對多的關系,文章與推薦位是一對多的關系;

上面Article類中的img表示圖片封面字段,article_img/為上傳目錄,%Y/%m/%d/為自動在上傳的圖片上加上文件上傳的時間。

完成上面的model編寫之后,我們僅僅是完成了model的代碼編寫,但是這些模型並沒有真正的在數據庫中創建表,我們接下來就需要進行數據庫遷移!

  在進行數據庫遷移之前我們需要先配置Django項目使用MySQL數據庫(如果使用默認的數據庫那就不用配置了),mysql配置請參考:Django項目如何使用mysql數據庫  

在數據庫配置好之后,我們就可以來進行數據庫遷移啦!數據庫遷移非常的簡單,只需要執行以下命令即可:

python3 manage.py makemigrations
python3 manage.py migrate

遷移的時候可能會提示需要安裝Pillow,出現這個錯誤的原因是因為我們的Article和Banner類使用了圖片字段ImageField,我們需要用到圖片處理包,按照錯誤提示執行安裝Pillow模塊就可以了:

pip3 install Pillow

Pillow模塊安裝成功之后,再執行遷移數據庫:

數據庫遷移成功之后,程序會在blog下的migrations目錄里自動生成幾個000開頭的文件,文件里面記錄着數據庫遷移記錄: 

 數據庫遷移后查看數據庫中表,表名默認為:應用名稱_模型名稱:

 至此,我們的模型model就創建成功了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM