Django Models - 網頁與資料庫連結

網頁與資料庫連結

Posted by 劉啟仲 on Monday, January 25, 2021

MODEL模型:

  • 數據邏輯的處理
    • 創立資料
    • 取得資料
    • 新增資料
    • 刪除資料
  • 資料庫的欄位
    • 每一個Models.py都是一個資料表

產生資料

修改 mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  #PostgreSQL
        'NAME': 'dbDjango', #資料庫名稱
        'USER': 'postgres',  #資料庫帳號
        'PASSWORD': 'postgres',  #資料庫密碼
        'HOST': 'localhost',  #Server(伺服器)位址
        'PORT': '5432'  #PostgreSQL Port號
    }
}

輸入下面的指令來產生 migrate

$ python manage.py migrate

修改 polls/models.py

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)



class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

輸入下面的指令來為我們對於 model 的改動產生 migrate,這邊只是產生一個紀錄欓,紀錄變化。

$ python manage.py makemigrations polls

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice

可以輸入以下指令觀看這次的遷移運行了哪些SQL

$ python manage.py sqlmigrate polls 0001
BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL,
    "question_id" integer NOT NULL
);
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");

COMMIT;

輸入下面的指令來將我們的 migrate 實際寫入資料庫中

$ python manage.py migrate polls

建立 Superuser

執行指令並輸入帳號密碼與電子信箱

$ python manage.py createsuperuser

編輯 polls/admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)

進入 Admin

開啟瀏覽器連接 http://localhost:8000/admin/

輸入剛剛建立的 Superuser 就可以看到整個 Admin 介面,可以從這邊查看資料庫的狀況