แผนการเรียนรู้
/

ความรู้เบื้องต้นเกี่ยวกับ
Django Model

Django ORM + Field + Query API

ผลลัพธ์การเรียนรู้

1
อธิบายรูปแบบการกำหนดรูปแบบการจัดเก็บข้อมูลของ Django ได้
2
ประยุกต์ใช้ฟิลด์ (Field) ใน Model ได้
3
ประยุกต์ใช้คำสั่งค้นหา (Query) ได้ตรงตามเงื่อนไขที่กำหนดให้
สัปดาห์ที่ 3

ทำความเข้าใจโครงสร้างของ
Django Model และ Field

1. Django Model คืออะไร?

  • เป็นคลาสที่ใช้กำหนดโครงสร้างของข้อมูลในฐานข้อมูล
  • ใช้ภาษา Python เพื่อสร้าง schema แทนการเขียน SQL โดยตรง
  • แต่ละ Model จะถูก map ไปเป็นตารางในฐานข้อมูล

2. การสร้าง Model พื้นฐาน

              
from django.db import models

class Student(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()
   email = models.EmailField()
              

โค้ดด้านบนจะสร้างตารางชื่อ student ในฐานข้อมูล พร้อม field name, age และ email

3. ประเภทของ Field ที่ใช้บ่อย

  • CharField – ข้อความสั้น
  • TextField – ข้อความยาว
  • IntegerField – ตัวเลขจำนวนเต็ม
  • FloatField – เลขทศนิยม
  • DateField – วันที่
  • BooleanField – จริง/เท็จ
  • EmailField – อีเมล
  • ForeignKey – ความสัมพันธ์กับ model อื่น
เวลาที่ใช้: 1 ชั่วโมง

การค้นหาข้อมูลด้วย
QuerySet ใน Django

1. QuerySet คืออะไร?

  • เป็นชุดของผลลัพธ์ที่ได้จากการ query ข้อมูลจากฐานข้อมูล
  • ใช้ในการค้นหา กรอง จัดเรียง และรวมข้อมูลจาก model
  • รองรับ method เช่น .filter(), .exclude(), .get()

2. คำสั่งค้นหาพื้นฐาน

              
# ดึงทั้งหมด
Student.objects.all()

# ดึงเฉพาะคนที่อายุเกิน 18
Student.objects.filter(age__gt=18)

# ดึงคนที่ชื่อคือ “John”
Student.objects.get(name="John")

# ดึงเฉพาะคนที่ไม่ใช่ John
Student.objects.exclude(name="John")
            

ใช้ filter สำหรับหลายผลลัพธ์ และ get สำหรับผลลัพธ์เดียว

3. ตัวอย่างการใช้ Lookup Expression

  • exact: ตรงกันพอดี → name__exact="John"
  • contains: มีข้อความ → name__contains="oh"
  • gte: มากกว่าหรือเท่ากับ → age__gte=20
  • lte: น้อยกว่าหรือเท่ากับ → age__lte=25
  • in: อยู่ในรายการ → age__in=[18,19,20]
  • startswith: ขึ้นต้นด้วย → name__startswith="A"
เวลาที่ใช้: 1 ชั่วโมง

การใช้งาน QuerySet ใน Django

วิธีการดึงข้อมูลจากฐานข้อมูลอย่างมีประสิทธิภาพ ด้วย Django ORM

คำสั่งพื้นฐานในการค้นหาข้อมูล

  • .all() – ดึงข้อมูลทั้งหมด
  • .filter(เงื่อนไข) – ดึงข้อมูลที่ตรงกับเงื่อนไข
  • .get(เงื่อนไข) – ดึงเพียง 1 เรคคอร์ดที่ตรงกับเงื่อนไข (ต้องมีแค่หนึ่ง ไม่งั้น error)
  • .exclude(เงื่อนไข) – ดึงข้อมูลที่ไม่ตรงกับเงื่อนไข
  • .order_by('field') – เรียงลำดับผลลัพธ์
  • .count() – นับจำนวนแถว

ตัวอย่างการใช้งาน QuerySet

              
# ดึงข้อมูลนักเรียนทั้งหมด
Student.objects.all()

# ดึงนักเรียนที่อายุ 18 ปี
Student.objects.filter(age=18)

# ดึงนักเรียนชื่อ "สมชาย"
Student.objects.get(name="สมชาย")

# ดึงนักเรียนที่ไม่ใช่อายุ 20 ปี
Student.objects.exclude(age=20)

# เรียงลำดับตามชื่อ (จาก ก → ฮ)
Student.objects.order_by("name")
            
เวลา: 1 ชั่วโมง

การจัดการข้อมูลในฐานข้อมูล (CRUD)

เรียนรู้การใช้ Django ORM ในการ เพิ่ม, แก้ไข, และ ลบ ข้อมูล

🟢 เพิ่มข้อมูล (Create)

                
# สร้างและบันทึกข้อมูลใหม่
student = Student(name="สมศรี", age=17)
student.save()

# หรือใช้ create()
Student.objects.create(name="สมศรี", age=17)
              

🟡 แก้ไขข้อมูล (Update)

                
# แก้ไขข้อมูลของนักเรียน
student = Student.objects.get(id=1)
student.age = 18
student.save()
              

🔴 ลบข้อมูล (Delete)

                
# ลบข้อมูลนักเรียน
student = Student.objects.get(id=1)
student.delete()
              
เวลา: 1 ชั่วโมง

💻 Lab: จัดการข้อมูลนักเรียน

แบบฝึกหัดการใช้ Django ORM เพื่อ เพิ่ม, แก้ไข, และ ลบ ข้อมูลในฐานข้อมูล
🟢 เพิ่มข้อมูลนักเรียน
➤ ใช้ `Student.objects.create(...)` หรือสร้าง instance แล้ว `save()`
🟡 แก้ไขข้อมูลนักเรียน
➤ ดึง object ด้วย `.get()` แล้วเปลี่ยนค่า attribute ตามที่กำหนด
🔴 ลบข้อมูลนักเรียน
➤ ใช้ `.delete()` เพื่อลบ object จากฐานข้อมูล
คำแนะนำ: ให้ทดลองรันคำสั่งใน python manage.py shell
เวลา: 1 ชั่วโมง

🌐 การแสดงข้อมูลบนหน้าเว็บ

แสดงข้อมูลนักเรียนจากฐานข้อมูลไปยังหน้าเว็บไซต์ด้วย Django
🔹 1. เขียน View
➤ ใช้ Student.objects.all() เพื่อดึงข้อมูลทั้งหมด
➤ ส่ง context ไปยัง template
🔹 2. สร้าง Template
➤ วนลูปแสดงข้อมูลด้วย {% for student in students %}
➤ ใช้ Django template language เช่น {{ student.name }}
🔹 3. เชื่อมโยง URL
➤ เพิ่ม path ใน urls.py ให้ชี้มาที่ view นั้น
✅ ตัวอย่างการแสดง: รายชื่อนักเรียน | คะแนนสอบ | เกรดเฉลี่ย
เวลา: 1 ชั่วโมง

🧠 ทบทวน: การแสดงข้อมูลด้วย Django

Model: กำหนดโครงสร้างข้อมูลใน `models.py` เช่น Student(name, score)
Migration: ใช้ `makemigrations` และ `migrate` เพื่อสร้างตารางในฐานข้อมูล
Data: เพิ่มข้อมูลด้วย admin หรือ shell เช่น `Student.objects.create(...)`
View: ดึงข้อมูลจาก model เช่น `Student.objects.all()` และส่งไปยัง template
Template: ใช้ `for` loop และ `{{ }}` เพื่อแสดงข้อมูลใน HTML
URL: เชื่อมเส้นทางกับ view ผ่าน `urls.py`
Laboratory time.

🛠 ภาคปฏิบัติ: แสดงข้อมูลจากฐานข้อมูล

1️⃣ สร้าง Model Book(title, author, year) ใน models.py
2️⃣ รันคำสั่ง makemigrations และ migrate เพื่อสร้างตาราง
3️⃣ เพิ่มข้อมูลหนังสือใน Django Admin หรือ Shell (เช่น 5 รายการ)
4️⃣ สร้าง View เพื่อดึงข้อมูล: Book.objects.all()
5️⃣ เขียน Template (HTML) เพื่อแสดงรายชื่อหนังสือทั้งหมด
6️⃣ เชื่อม URL เข้ากับ View ที่สร้างไว้
⏱ ใช้เวลา: 60 นาที
🧑‍💻 แนะนำให้ทำเป็นกลุ่มละ 2 คน / ครูเดินดู-แนะนำเป็นรายกลุ่ม

🔍 ภาคปฏิบัติ: สร้างหน้าแสดงรายละเอียด

1️⃣ เพิ่ม URL: /books/<id>/ สำหรับดูรายละเอียดแต่ละเล่ม
2️⃣ เขียน View ฟังก์ชันใหม่ (หรือใช้ DetailView) เพื่อดึง Book ตาม ID
3️⃣ สร้าง Template ชื่อ book_detail.html ที่แสดง title, author, year
4️⃣ เพิ่มปุ่ม "ดูรายละเอียด" ที่ลิงก์จากหน้า list ไปยังหน้า detail
5️⃣ ทดสอบเปิดแต่ละรายการในเบราว์เซอร์ให้ถูกต้อง
⏱ ใช้เวลา: 45–60 นาที
💡 เสริมแนวคิด: URL parameter, template inheritance, error handling