models.Model
CharField
- ข้อความสั้น มีความยาวจำกัดTextField
- ข้อความยาว ไม่จำกัดความยาวIntegerField
- ตัวเลขจำนวนเต็มFloatField
- ตัวเลขทศนิยมBooleanField
- ค่าจริง/เท็จ (True/False)DateField
/ DateTimeField
- วันที่ / วันเวลาEmailField
- อีเมลForeignKey
- ความสัมพันธ์กับโมเดลอื่นความสัมพันธ์แบบหลาย-ต่อ-หนึ่ง (Many-to-One)
class Book(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE)
ความสัมพันธ์แบบหลาย-ต่อ-หลาย (Many-to-Many)
class Student(models.Model): courses = models.ManyToManyField(Course)
ความสัมพันธ์แบบหนึ่ง-ต่อ-หนึ่ง (One-to-One)
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE)
class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE)
# ดึงหนังสือทั้งหมดของผู้เขียนชื่อ 'Alice' books_by_alice = Book.objects.filter(author__name='Alice') # ดึงผู้เขียนของหนังสือชื่อ 'Django Tips' author_of_book = Book.objects.get(title='Django Tips').author # ดึงชื่อหนังสือทั้งหมดที่มีผู้เขียนเป็น 'Bob' titles = Book.objects.filter(author__name='Bob').values_list('title', flat=True)
class User(models.Model): username = models.CharField(max_length=50) class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) bio = models.TextField(blank=True)
# ดึงโปรไฟล์ของผู้ใช้ username 'john' profile = Profile.objects.get(user__username='john') # ดึงชื่อผู้ใช้จากโปรไฟล์ที่มี id=5 username = Profile.objects.get(id=5).user.username # สร้างโปรไฟล์ใหม่สำหรับผู้ใช้ user = User.objects.create(username='mary') profile = Profile.objects.create(user=user, bio='Hello Mary!')
class Student(models.Model): name = models.CharField(max_length=100) class Course(models.Model): title = models.CharField(max_length=200) students = models.ManyToManyField(Student)
# ดึงคอร์สทั้งหมดของนักเรียนชื่อ 'Tom' courses_of_tom = Course.objects.filter(students__name='Tom') # ดึงนักเรียนทั้งหมดที่ลงเรียนคอร์สชื่อ 'Math 101' students_in_math = Student.objects.filter(course__title='Math 101') # เพิ่มนักเรียน 'Anna' ลงในคอร์ส 'Physics' physics = Course.objects.get(title='Physics') anna = Student.objects.get(name='Anna') physics.students.add(anna)
Student
, Course
, Instructor
และ Enrollment
from django.db import models class Instructor(models.Model): name = models.CharField(max_length=100) email = models.EmailField() class Course(models.Model): title = models.CharField(max_length=200) instructor = models.ForeignKey(Instructor, on_delete=models.CASCADE) class Student(models.Model): name = models.CharField(max_length=100) email = models.EmailField() class Enrollment(models.Model): student = models.ForeignKey(Student, on_delete=models.CASCADE) course = models.ForeignKey(Course, on_delete=models.CASCADE) enrolled_at = models.DateTimeField(auto_now_add=True)
# ดึงรายชื่อนักเรียนที่ลงทะเบียนคอร์ส 'Python Basics' students_in_python = Student.objects.filter(enrollment__course__title='Python Basics') # ดึงคอร์สทั้งหมดที่อาจารย์ชื่อ 'Ajarn Somchai' สอน courses_by_somchai = Course.objects.filter(instructor__name='Ajarn Somchai') # ดึงอีเมลนักเรียนที่ลงทะเบียนในคอร์สที่มีคำว่า 'Data' ในชื่อ emails = Student.objects.filter(enrollment__course__title__icontains='Data').values_list('email', flat=True) # ดึงข้อมูล enrollment ของนักเรียนคนหนึ่ง พร้อมคอร์สที่ลงทะเบียน enrollments = Enrollment.objects.select_related('student', 'course').filter(student__name='Napat')