Models và Cơ sở dữ liệu Truy vấn dữ liệu với QuerySet
Bài tập: Thử thách truy vấn
Bối cảnh
Bạn đã học được các "câu lệnh" cơ bản để "trò chuyện" với cơ sở dữ liệu thông qua Django ORM. Bây giờ là lúc vận dụng những gì đã học vào "sân chơi" Django Shell để giải quyết các bài toán thực tế.
Bài tập này được thiết kế để thử thách khả năng kết hợp các phương thức truy vấn khác nhau của bạn.
Mục tiêu
Thực hành thành thạo các thao tác CRUD cơ bản trong Django Shell.
Sử dụng các Field Lookups để thực hiện các truy vấn lọc phức tạp hơn.
Kết hợp các phương thức
order_by(), cắt lát (slicing) vàcount()để lấy dữ liệu theo yêu cầu.
Trước khi bắt đầu
Mở terminal, di chuyển vào thư mục gốc của dự án.
Kích hoạt môi trường ảo
(venv).Khởi động Django Shell:
Bash
python manage.py shellImport các model cần thiết:
Python
from courses.models import Course, Lesson
Các Nhiệm vụ
Hãy sử dụng Django Shell để viết và thực thi các câu lệnh nhằm hoàn thành 5 nhiệm vụ sau:
Nhiệm vụ 1: Thêm Dữ liệu
Tạo thêm ít nhất hai khóa học mới. Ví dụ:
Khóa học 1: tên là "Học máy Căn bản", mô tả là "Nhập môn Machine Learning với Python."
Khóa học 2: tên là "Thiết kế Web Nâng cao với CSS Grid", mô tả là "Làm chủ layout hiện đại."
Nhiệm vụ 2: Tìm kiếm
Viết một truy vấn để tìm tất cả các khóa học có tên chứa chữ
"Python"(không phân biệt chữ hoa, chữ thường).
Nhiệm vụ 3: Cập nhật
Tìm khóa học có tên là "Django Toàn tập".
Cập nhật lại trường
descriptioncủa nó thành:"Cập nhật: Khóa học Django toàn diện nhất năm 2025."
Nhiệm vụ 4: Thống kê
Viết một câu lệnh để đếm tổng số khóa học hiện có trong cơ sở dữ liệu.
Nhiệm vụ 5: Lấy Dữ liệu Mới nhất
Viết một truy vấn để lấy ra 2 khóa học được tạo gần đây nhất.
Gợi ý (Nếu bạn bị bí)
Nhiệm vụ 1: Sử dụng phương thức
create()của ManagerCourse.objects.Nhiệm vụ 2: Bạn cần dùng
filter()kết hợp với lookup nào để tìm kiếm "chứa" một chuỗi và không phân biệt hoa thường?Nhiệm vụ 3: Quy trình là: dùng
get()để lấy đối tượng -> thay đổi thuộc tính -> gọi phương thức.save().Nhiệm vụ 4: Có một phương thức QuerySet hiệu quả hơn là dùng
len(Course.objects.all())đấy.Nhiệm vụ 5: Bạn sẽ cần kết hợp
order_by()với dấu-và kỹ thuật cắt lát (slicing) của Python.
Nhiệm vụ 1: Thêm Dữ liệu
Python
>>> Course.objects.create(name="Học máy Căn bản", description="Nhập môn Machine Learning với Python.")
<Course: Học máy Căn bản>
>>> Course.objects.create(name="Thiết kế Web Nâng cao với CSS Grid", description="Làm chủ layout hiện đại.")
<Course: Thiết kế Web Nâng cao với CSS Grid>
Nhiệm vụ 2: Tìm kiếm
Python
# Sử dụng lookup __icontains (i = case-insensitive, contains = chứa)
>>> Course.objects.filter(name__icontains="python")
<QuerySet [<Course: Python cho Khoa học Dữ liệu>, <Course: Học máy Căn bản>]>
Nhiệm vụ 3: Cập nhật
Python
# Bước 1: Lấy đối tượng
>>> c = Course.objects.get(name="Django Toàn tập")
# Bước 2: Thay đổi thuộc tính
>>> c.description = "Cập nhật: Khóa học Django toàn diện nhất năm 2025."
# Bước 3: Lưu lại
>>> c.save()
Nhiệm vụ 4: Thống kê
Python
# Phương thức .count() hiệu quả hơn vì nó thực hiện COUNT() ở cấp độ CSDL.
>>> Course.objects.count()
4
# (Con số của bạn có thể khác tùy thuộc vào dữ liệu bạn đã tạo)
Nhiệm vụ 5: Lấy Dữ liệu Mới nhất
Python
# Sắp xếp theo created_at giảm dần (dấu -) và lấy 2 phần tử đầu tiên
>>> Course.objects.order_by('-created_at')[:2]
<QuerySet [<Course: Thiết kế Web Nâng cao với CSS Grid>, <Course: Học máy Căn bản>]>
Hãy ghi chú lại những bước mà bạn đã thực hiện.
Bạn đã xem hết phần xem trước
Đã xem 1/1 bài xem trước · còn 113 hoạt động
Ghi danh để mở toàn bộ khoá học và lưu tiến độ học của bạn.