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

  1. Mở terminal, di chuyển vào thư mục gốc của dự án.

  2. Kích hoạt môi trường ảo (venv).

  3. Khởi động Django Shell:

    Bash

    python manage.py shell
    
  4. Import 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:

  1. 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."

  2. 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).

  3. 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 description của nó thành: "Cập nhật: Khóa học Django toàn diện nhất năm 2025."

  4. 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.

  5. 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 Manager Course.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.

Đáp án tham khảo

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.

799,000đ 1,299,000đ

HỌC PYTHON - CÔNG TY CP CODEGYM VIỆT NAM

MST: 0108104526
Địa chỉ: Căn hộ TT01.23, dự án Hải Đăng city, phường Từ Liêm, thành phố Hà Nội
Điện thoại: +84 989 534 458
Website: codegym.vn