Kết Hợp Pandas & Django
Xây dựng hệ thống Quản lý Thiết bị dạy học từ dữ liệu Excel
1. File Excel Thiết Bị
➜
2. Pandas Xử Lý & Import
➜
3. SQLite Database
➜
4. Django Web Interface
Các bước thực hiện
- Bước 1: Chuẩn bị Model Django
- Bước 2: Cài đặt thư viện hỗ trợ
- Bước 3: Code Import dữ liệu từ Excel
- Bước 4: Kiểm tra dữ liệu trong SQLite
- Bước 5: Tạo View hiển thị danh sách
- Bước 6: Giao diện bảng thiết bị (HTML)
- Bước 7: Tìm kiếm thiết bị nâng cao
- Bước 8: Thống kê số lượng bằng Pandas
- Bước 9: Xuất báo cáo từ Web ra Excel
- Bước 10: Hoàn thiện & Triển khai
Bước 1: Khai báo cấu trúc thiết bị (Model)
Chúng ta cần một "khuôn mẫu" để lưu trữ thông tin thiết bị trong Database.
models.py
from django.db import models
class ThietBi(models.Model):
ma_so = models.CharField(max_length=20, unique=True)
ten_thiet_bi = models.CharField(max_length=200)
phong_kho = models.CharField(max_length=100)
so_luong = models.IntegerField(default=0)
tinh_trang = models.CharField(max_length=50, default="Tốt")
def __str__(self):
return self.ten_thiet_bi
Bước 3: Viết Script Import bằng Pandas
Đây là phần quan trọng nhất: Đọc file Excel báo cáo cuối năm và đẩy thẳng vào SQLite của Django.
import_data.py
import pandas as pd
from main.models import ThietBi
def import_excel_to_db(file_path):
# 1. Dùng Pandas đọc Excel
df = pd.read_excel(file_path)
# 2. Lặp qua từng dòng dữ liệu
for index, row in df.iterrows():
ThietBi.objects.update_or_create(
ma_so=row['Mã TB'],
defaults={
'ten_thiet_bi': row['Tên'],
'phong_kho': row['Phòng'],
'so_luong': row['Số lượng'],
}
)
print("Import hoàn tất!")
💡 Giải thích:
df.iterrows(): Giúp duyệt qua từng hàng trong file Excel như một danh sách.update_or_create: Nếu thiết bị đã tồn tại (dựa trên Mã số) thì cập nhật thông tin mới, nếu chưa có thì tạo mới. Tránh trùng lặp dữ liệu.
Bước 8: Thống kê báo cáo nhanh
Kết hợp sức mạnh tính toán của Pandas để tạo báo cáo nhanh trên Web.
views.py
def thong_ke_thiet_bi(request):
# Lấy dữ liệu từ SQLite chuyển thành DataFrame
data = ThietBi.objects.all().values()
df = pd.DataFrame(data)
# Thống kê tổng số lượng theo từng phòng kho
report = df.groupby('phong_kho')['so_luong'].sum().to_dict()
return render(request, 'report.html', {'report': report})
💡 Giải thích: Thay vì viết các câu lệnh SQL phức tạp, chúng ta đưa dữ liệu về dạng DataFrame để tận dụng hàm
groupby() của Pandas chỉ trong 1 dòng code.
Bước 9: Xuất báo cáo ngược lại Excel
Khi Hiệu trưởng yêu cầu báo cáo, bạn có thể xuất dữ liệu từ Web ra file Excel chuẩn chỉ bằng 1 cú click.
views.py
import io
from django.http import HttpResponse
def export_to_excel(request):
df = pd.DataFrame(list(ThietBi.objects.all().values()))
output = io.BytesIO()
with pd.ExcelWriter(output, engine='openpyxl') as writer:
df.to_excel(writer, index=False, sheet_name='ThietBi')
response = HttpResponse(output.getvalue(), content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=Bao_cao_thiet_bi.xlsx'
return response
✅ Kết luận bài học
Sự kết hợp này mang lại quy trình khép kín:
- Dữ liệu đầu vào: Tận dụng các file Excel có sẵn từ kế toán/văn phòng.
- Lưu trữ: Dùng SQLite (đi kèm Django) nhẹ nhàng, không cần cài đặt server phức tạp.
- Hiển thị: Django giúp mọi giáo viên trong trường có thể truy cập qua mạng nội bộ để đăng ký mượn/trả thiết bị.
📌 Danh sách bình luận