Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

Django 留言功能實作指南:從模型設計到應用完成

最後更新:2024年12月2日Python

本文為 Django 高階教學,第 3 篇:

  1. 使用 Poetry 管理 Django 專案:完整指南
  2. 使用 ModelForm 優化 Django 表單與資料庫操作
  3. Django 留言功能實作指南:從模型設計到應用完成 👈 所在位置
  4. Django 留言功能新增與視圖互動詳解
  5. 在 Django 中實現留言檢索與排序功能:完整指南
  6. 在 Django 中實現留言換行與顯示時間功能
  7. 在 Django 中實現留言刪除功能:完整指南
  8. 在 Django 中實現軟刪除功能:完整指南
  9. 在 Django 中實現軟刪除功能:Fat Model, Thin View

建議閱讀本文前,先閱讀完 Django 進階教學 系列文

為履歷(Resume)新增留言功能是一個常見的需求。

在本指南中,我們將以留言模型的設計為起點,詳細介紹如何建立留言應用(comments app),完成數據庫設計與模型遷移,幫助新手快速上手。


規劃留言功能

預想留言模型

留言模型(Comment)需要包含以下欄位:

  • resume_id:關聯履歷的主鍵,標記該留言隸屬於哪份履歷。
  • content:留言的主要內容。
  • created_at:留言的建立時間,記錄每條留言的時間戳。

建立留言應用

建立應用

運行以下指令,創建一個名為 comments 的應用:

python manage.py startapp comments

註冊應用

打開專案目錄下的 settings.py,將新應用添加到 INSTALLED_APPS 中:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "resumes",    # 履歷應用
    "comments",   # 留言應用
]

定義留言模型

目錄結構示意圖

新增 comments 應用後,目錄結構如下:

mysite/
├── manage.py
├── mysite/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── asgi.py
│   ├── wsgi.py
├── resumes/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py         # 定義 Resume 模型
│   ├── views.py
│   ├── urls.py
│   ├── templates/
│       ├── resumes/
├── comments/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py         # 定義 Comment 模型
│   ├── views.py
│   ├── urls.py
│   ├── migrations/

在 comments/models.py 中定義模型

from django.db import models
from resumes.models import Resume  # 導入履歷模型

class Comment(models.Model):
    resume_id = models.ForeignKey(Resume, on_delete=models.CASCADE)  # 外鍵關聯
    content = models.TextField()  # 留言內容
    created_at = models.DateTimeField(auto_now_add=True)  # 自動設置建立時間

欄位說明

ForeignKey 的用途

  • ForeignKey:用於建立多對一的關係。
    • 在本例中,Comment 模型通過 resume 欄位關聯到 Resume 模型,表示一份履歷可以有多條留言。
    • 選項 on_delete:
      • CASCADE:當履歷被刪除時,相關的留言也會被自動刪除。
      • RESTRICT:阻止刪除操作,保留相關資料。
      • SET_NULL:當履歷被刪除時,將留言的 resume 欄位設為空值(需要設置 null=True)。

DateTimeField 的用途

  • DateTimeField:存儲日期和時間數據。
  • 選項 auto_now_add=True:
    • 自動設置該欄位為當前時間,僅在記錄創建時執行一次。
    • 適用於記錄創建時間的場景,如留言、訂單建立等。

遷移模型到資料庫

完成模型定義後,需要將模型同步到資料庫。

生成遷移文件

運行以下指令生成遷移文件:

python manage.py makemigrations
  • 該指令會在 comments/migrations/ 資料夾中創建一個新的遷移文件,描述模型的變更。

應用遷移

運行以下指令執行遷移,將模型應用到資料庫:

python manage.py migrate
  • 該指令將遷移文件的內容寫入資料庫,創建 comments 表。

小結

透過以上步驟,我們完成了以下內容:

  1. 留言模型設計:通過 ForeignKey 建立多對一關係,記錄留言內容及時間。
  2. 應用建立與註冊:創建 comments 應用並在專案中啟用。
  3. 數據庫同步:完成模型的遷移,確保資料庫與模型保持一致。

下一步,可以進一步實現留言的新增、刪除和前端顯示功能,完善網站的互動體驗。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

Python

目錄

  • 規劃留言功能
  • 預想留言模型
  • 建立留言應用
  • 建立應用
  • 註冊應用
  • 定義留言模型
  • 目錄結構示意圖
  • 在 comments/models.py 中定義模型
  • 欄位說明
  • 遷移模型到資料庫
  • 生成遷移文件
  • 應用遷移
  • 小結