Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Model Django trong Python cho người mới
Bắt đầu tìm hiểu phát triển web với Django, một trong những khái niệm quan trọng nhất mà bạn sẽ phải đối mặt đó là "Model". Trong Django, Model đóng vai trò quan trọng trong việc định nghĩa và tương tác với cơ sở dữ liệu, cho phép bạn lưu trữ và truy xuất dữ liệu một cách dễ dàng.
Cho dù bạn mới bắt đầu với Django hay muốn củng cố kiến thức của mình về Model, chủ đề này sẽ cung cấp cho bạn một cái nhìn tổng quan và chi tiết về cách sử dụng Model trong Django.
Hãy cùng freetuts.net bắt đầu tìm hiểu Model trong Django và làm quen với cách Django giúp bạn quản lý cơ sở dữ liệu của ứng dụng web của mình.
Model trong Django là gì?
Trong Django, Model là một phần quan trọng của hệ thống ORM (Object-Relational Mapping), cho phép bạn định nghĩa cấu trúc dữ liệu và tương tác với cơ sở dữ liệu một cách dễ dàng và linh hoạt. Model trong Django thường tương ứng với một bảng trong cơ sở dữ liệu, mỗi trường của Model thường tương ứng với một cột trong bảng.
Bài viết này được đăng tại [free tuts .net]
Model định nghĩa các loại dữ liệu và quan hệ giữa chúng, giúp bạn lưu trữ và truy xuất dữ liệu một cách hiệu quả. Bằng cách sử dụng Model, bạn có thể thực hiện các hoạt động như tạo, đọc, cập nhật và xóa dữ liệu từ cơ sở dữ liệu một cách thuận tiện thông qua các truy vấn dựa trên đối tượng.
Điều này giúp giảm bớt sự phức tạp trong việc tương tác với cơ sở dữ liệu và cho phép bạn tập trung vào việc phát triển các tính năng chính của ứng dụng mà không cần lo lắng về các chi tiết kỹ thuật của cơ sở dữ liệu.
Mục đích của Model trong Django
Model trong Django có các mục đích chính sau:
-
Định nghĩa cấu trúc dữ liệu: Model cho phép bạn định nghĩa cấu trúc của dữ liệu một cách rõ ràng bằng các trường và kiểu dữ liệu tương ứng. Điều này giúp quản lý và tổ chức dữ liệu một cách có tổ chức trong ứng dụng.
-
Tương tác với cơ sở dữ liệu: Model cung cấp các phương thức để tạo, đọc, cập nhật và xóa dữ liệu từ cơ sở dữ liệu. Điều này cho phép bạn thực hiện các hoạt động cơ bản như thêm, sửa đổi và xóa dữ liệu một cách dễ dàng thông qua các truy vấn dựa trên đối tượng thay vì sử dụng SQL trực tiếp.
-
Tích hợp với Django Admin: Model trong Django được tích hợp một cách mạnh mẽ với Django Admin, cung cấp một giao diện quản trị tự động và dễ sử dụng cho việc quản lý dữ liệu. Bằng cách sử dụng ModelAdmin, bạn có thể tùy chỉnh và cấu hình giao diện quản trị theo nhu cầu của ứng dụng.
-
Tạo các quan hệ giữa các đối tượng: Model cho phép bạn xác định các mối quan hệ giữa các đối tượng dữ liệu, bao gồm các quan hệ một-một, một-nhiều và nhiều-nhiều. Điều này giúp bạn tổ chức dữ liệu một cách logic và linh hoạt, cũng như thực hiện các truy vấn phức tạp liên quan đến các đối tượng liên quan.
Mối quan hệ giữa Model và Database
-
Định nghĩa cấu trúc dữ liệu: Trong Django, Model định nghĩa cấu trúc của bảng trong cơ sở dữ liệu. Mỗi trường trong Model tương ứng với một cột trong bảng, và các kiểu dữ liệu của trường quyết định kiểu dữ liệu của cột tương ứng trong cơ sở dữ liệu.
-
Tạo và cập nhật cơ sở dữ liệu: Khi bạn định nghĩa và sử dụng các Model trong Django, Django sẽ tự động tạo hoặc cập nhật cấu trúc của cơ sở dữ liệu dựa trên định nghĩa Model của bạn. Điều này giúp tiết kiệm thời gian và công sức trong việc quản lý cấu trúc của cơ sở dữ liệu.
-
Truy vấn dữ liệu: Model cung cấp một cách thuận tiện để thực hiện các truy vấn dựa trên đối tượng để truy xuất và tương tác với dữ liệu trong cơ sở dữ liệu. Thay vì phải viết các truy vấn SQL phức tạp, bạn có thể sử dụng các phương thức của Model để thực hiện các hoạt động như lọc, sắp xếp và lấy dữ liệu một cách dễ dàng và hiệu quả.
Tạo một Model Django mới trong Python
Sử dụng lớp models.Model
Lớp models.Model là một phần quan trọng trong Django ORM (Object-Relational Mapping), cho phép bạn định nghĩa các đối tượng dữ liệu và mối quan hệ giữa chúng dưới dạng các lớp Python. Mỗi trường của lớp Model tương ứng với một cột trong bảng của cơ sở dữ liệu.
Tạo một Model mới với các trường cơ bản
Để tạo một Model mới trong Django, bạn cần định nghĩa một lớp con của models.Model và xác định các trường dữ liệu bằng cách sử dụng các lớp trường được cung cấp bởi Django như CharField, IntegerField, vv.
Ví dụ, dưới đây là một Model đơn giản đại diện cho một người dùng trong hệ thống:
from django.db import models class UserProfile(models.Model): username = models.CharField(max_length=50) email = models.EmailField() age = models.IntegerField() date_joined = models.DateTimeField(auto_now_add=True) #Bài viết này được đăng tại freetuts.net def __str__(self): return self.username
Trong ví dụ này:
UserProfile
là tên của Model.username
,email
,age
, vàdate_joined
là các trường của Model, mỗi trường được đại diện bởi một lớp trường như CharField, EmailField, IntegerField, và DateTimeField.__str__
là một phương thức để hiển thị một đối tượng Model dưới dạng chuỗi, thường là tên của đối tượng.
Tùy chỉnh tên bảng
Sử dụng thuộc tính db_table
Trong Django, tên bảng mặc định cho mỗi Model sẽ được tạo dựa trên tên của Model và tên ứng dụng. Tuy nhiên, bạn có thể tùy chỉnh tên bảng bằng cách sử dụng thuộc tính db_table trong lớp Model.
Ví dụ, để đặt tên bảng của Model UserProfile
là users_profile
, bạn có thể làm như sau:
class UserProfile(models.Model): # Khai báo trường dữ liệu ở đây #Bài viết này được đăng tại freetuts.net class Meta: db_table = 'users_profile'
Thay đổi tên bảng mặc định
Mặc định, Django sẽ tạo tên bảng bằng cách kết hợp tên của Model với tên của ứng dụng chứa Model, sử dụng dấu gạch dưới (_) làm phân tách. Tuy nhiên, bạn có thể thay đổi cách Django tạo tên bảng mặc định bằng cách sử dụng thuộc tính db_table
mà không cần phải đặt tên bảng một cách cụ thể.
Ví dụ, để thay đổi tên bảng mặc định của Model UserProfile trong ứng dụng users thành user_profile
, bạn có thể làm như sau:
class UserProfile(models.Model): # Khai báo trường dữ liệu ở đây #Bài viết này được đăng tại freetuts.net class Meta: db_table = 'user_profile'
Trong cả hai ví dụ trên, Django sẽ tạo hoặc sử dụng bảng có tên là users_profile
hoặc user_profile
thay vì sử dụng tên mặc định được sinh ra tự động.
Sử dụng Models trong Python
Đăng ký ứng dụng chứa Model
Để sử dụng một Model trong Django, trước tiên bạn cần phải đăng ký ứng dụng chứa Model đó vào cấu hình của dự án Django của bạn.
Đăng ký ứng dụng
Ví dụ, nếu bạn có một ứng dụng có tên là blog, bạn có thể thêm nó vào danh sách INSTALLED_APPS
như sau:
- Mở file settings.py trong thư mục
django_project
của dự án Django của bạn. - Tìm danh sách
INSTALLED_APPS
. - Thêm tên của ứng dụng chứa Model vào danh sách này.
INSTALLED_APPS = [ ... 'blog', ... ]
Ví dụ: Đăng ký ứng dụng blog chứa Model Post.
# settings.py #Bài viết này được đăng tại freetuts.net INSTALLED_APPS = [ ... 'blog', # Đăng ký ứng dụng blog ... ]
Sử dụng các Model có sẵn
Import Model từ các gói có sẵn
Trong một số trường hợp, bạn có thể muốn sử dụng các Model đã được xây dựng sẵn trong Django hoặc các ứng dụng bổ sung. Để làm điều này, bạn cần import Model tương ứng từ các gói đó.
Ví dụ, để sử dụng Model User từ gói django.contrib.auth.models
, bạn có thể làm như sau:
from django.contrib.auth.models import User
Sử dụng các Model như User từ django.contrib.auth.models
Django cung cấp sẵn một số Model hữu ích trong gói django.contrib.auth.models
, bao gồm User, Group, vv. Các Model này thường được sử dụng để quản lý người dùng, phân quyền và xác thực trong ứng dụng Django.
Ví dụ, để tạo một người dùng mới, bạn có thể sử dụng Model User như sau:
from django.contrib.auth.models import User #Bài viết này được đăng tại freetuts.net # Tạo một người dùng mới new_user = User.objects.create_user(username='john_doe', email='john@example.com', password='password123')
Trong ví dụ này, mình sử dụng phương thức create_user
của Model User để tạo một người dùng mới với tên người dùng, email và mật khẩu được chỉ định.
Khai báo Mối quan hệ trong Python
Sử dụng ForeignKey
Định nghĩa mối quan hệ một-nhiều
Trong Django, mối quan hệ một-nhiều được định nghĩa bằng cách sử dụng trường ForeignKey. Mối quan hệ này được sử dụng khi một đối tượng của một Model có thể có một và chỉ một liên kết đến một đối tượng của Model khác.
Ví dụ, giả sử bạn có một Model Author và một Model Book, và mỗi cuốn sách được liên kết với một tác giả duy nhất. Trong trường hợp này, bạn sẽ sử dụng một trường ForeignKey trong Model Book để định nghĩa mối quan hệ một-nhiều với Model Author.
from django.db import models #Bài viết này được đăng tại freetuts.net class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE)
Trong ví dụ này, trường author trong Model Book là một trường ForeignKey
đến Model Author
, đại diện cho mối quan hệ một-nhiều giữa Author và Book.
Mô tả mối quan hệ giữa các bảng
- Mối quan hệ một-nhiều giữa Author và Book có thể được mô tả như sau:
- Mỗi tác giả (Author) có thể có nhiều cuốn sách (Book), nhưng mỗi cuốn sách chỉ thuộc về một tác giả.
- Khi bạn tạo một cuốn sách mới, bạn cần chỉ định tác giả của cuốn sách đó bằng cách chọn từ danh sách các tác giả đã có hoặc tạo một tác giả mới.
Sử dụng ManyToManyField
Định nghĩa mối quan hệ nhiều-nhiều
Trong Django, mối quan hệ nhiều-nhiều được định nghĩa bằng cách sử dụng trường ManyToManyField
. Mối quan hệ này được sử dụng khi mỗi đối tượng của một Model có thể liên kết với nhiều đối tượng của Model khác và ngược lại.
Ví dụ, giả sử bạn có một Model Student và một Model Course, và mỗi sinh viên có thể đăng ký nhiều khóa học và mỗi khóa học có thể có nhiều sinh viên đăng ký. Trong trường hợp này, bạn sẽ sử dụng một trường ManyToManyField
trong cả hai Model Studen
t và Course để định nghĩa mối quan hệ nhiều-nhiều giữa chúng.
from django.db import models class Student(models.Model): name = models.CharField(max_length=100) courses = models.ManyToManyField('Course') #Bài viết này được đăng tại freetuts.net class Course(models.Model): title = models.CharField(max_length=100)
Mô tả mối quan hệ và cách sử dụng
- Mối quan hệ nhiều-nhiều giữa Student và Course có thể được mô tả như sau:
- Mỗi sinh viên (Student) có thể đăng ký nhiều khóa học (Course), và mỗi khóa học cũng có thể có nhiều sinh viên đăng ký.
- Khi bạn tạo một sinh viên mới, bạn có thể chọn từ danh sách các khóa học có sẵn mà sinh viên đó đăng ký.
- Tương tự, khi bạn tạo một khóa học mới, bạn có thể chọn từ danh sách các sinh viên có sẵn để đăng ký vào khóa học đó.
Tùy chỉnh Model trong Python
Ghi đè phương thức str()
Định nghĩa phương thức str() để hiển thị chuỗi
Phương thức __str__()
trong Python được sử dụng để trả về một chuỗi biểu diễn của đối tượng. Trong Django, việc định nghĩa phương thức __str__()
cho Model là quan trọng để hiển thị thông tin đối tượng một cách dễ đọc trong quản trị Django và trong các ngữ cảnh khác.
Ví dụ, giả sử bạn có một Model Book và bạn muốn hiển thị tiêu đề của sách đó khi nó được in ra. Để làm điều này, bạn có thể ghi đè phương thức __str__()
trong Model Book để trả về tiêu đề của sách đó.
from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) #Bài viết này được đăng tại freetuts.net def __str__(self): return self.title
Trong ví dụ này, khi bạn in một đối tượng Book, phương thức __str__()
sẽ trả về tiêu đề của sách đó, làm cho việc hiển thị thông tin trở nên dễ dàng và dễ hiểu.
Sử dụng lớp Meta
Thiết lập các thuộc tính Meta để tùy chỉnh Model: Lớp Meta trong Django được sử dụng để cung cấp các tùy chọn tùy chỉnh cho Model. Bạn có thể sử dụng lớp Meta để thiết lập các thuộc tính như tên bảng, sắp xếp mặc định và nhiều thuộc tính khác.
Ví dụ, giả sử bạn muốn đặt tên bảng của Model là my_books
thay vì mặc định, bạn có thể sử dụng lớp Meta để thiết lập thuộc tính db_table.
from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) #Bài viết này được đăng tại freetuts.net class Meta: db_table = 'my_books'
Sắp xếp dữ liệu trả về từ Model: Bạn cũng có thể sử dụng lớp Meta để sắp xếp dữ liệu trả về từ Model theo một trường cụ thể. Ví dụ, nếu bạn muốn sắp xếp các cuốn sách theo tiêu đề trong các truy vấn, bạn có thể sử dụng thuộc tính ordering.
from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) #Bài viết này được đăng tại freetuts.net class Meta: ordering = ['title']
Trong ví dụ này, các cuốn sách sẽ được sắp xếp theo tiêu đề khi truy vấn được thực hiện.
Kết bài
Trong bài viết này, mình đã tìm hiểu về Model trong Django và cách sử dụng chúng để tạo và tùy chỉnh cấu trúc dữ liệu của chúng ta trong ứng dụng web Django.
Bạn cũng đã tìm hiểu mục đích của Model trong Django, nhấn mạnh vào mối quan hệ giữa Model và Database, cùng với cách sử dụng lớp models.Model để tạo một Model mới và tùy chỉnh tên bảng.
Ngoài ra, ta đã thực hành sử dụng Models bằng cách đăng ký ứng dụng chứa Model, sử dụng các Model có sẵn như User từ django.contrib.auth.models
, và cách sử dụng các mối quan hệ như ForeignKey
và ManyToManyField
.
Cuối cùng, mình đã tìm hiểu cách tùy chỉnh Model bằng cách ghi đè phương thức __str__()
để hiển thị chuỗi và sử dụng lớp Meta để thiết lập các thuộc tính như tên bảng và sắp xếp dữ liệu trả về.
Qua việc hiểu và áp dụng các khái niệm này, bạn sẽ có kiến thức cơ bản để xây dựng và quản lý cơ sở dữ liệu trong ứng dụng web Django của mình một cách linh hoạt .