Kế thừa mô hình trong Django là gì?
Kế thừa mô hình là một tính năng Django ORM cho phép các nhà phát triển tạo mối quan hệ phân cấp giữa các mô hình cơ sở dữ liệu. Nó cho phép sử dụng lại mã, khả năng mở rộng và cơ sở mã sạch hơn bằng cách tận dụng các nguyên tắc của lập trình hướng đối tượng.
Cho dù bạn đang xây dựng một ứng dụng web phức tạp hay làm việc trên một dự án nhỏ hơn, kế thừa mô hình có thể mang lại những lợi ích đáng kể, chẳng hạn như giảm dư thừa và đảm bảo hành vi nhất quán.
Mục Lục
Các loại kế thừa mô hình trong Django
Django cung cấp hỗ trợ cho ba kiểu kế thừa mô hình:
- Các lớp cơ sở trừu tượng.
- Kế thừa nhiều bảng.
- Mô hình ủy quyền.
Mỗi kiểu kế thừa mô hình này đều có lợi ích và bạn sẽ sử dụng chúng cho các mục đích cụ thể.
Các lớp cơ sở trừu tượng
Các lớp cơ sở trừu tượng cung cấp một cách để xác định các trường và phương thức chung mà nhiều mô hình có thể kế thừa. Ví dụ: nếu bạn có hai mô hình chia sẻ các trường tương tự nhau, bạn có thể sử dụng lớp cơ sở trừu tượng để xác định các trường tương tự. Hãy xem ví dụ này:
class Customer(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
customer_id = models.IntegerField() class Seller(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
seller_id = models.IntegerField()
Đoạn mã trên xác định hai mô hình Django: Khách hàng Và Người bán. Những mô hình này chia sẻ hai lĩnh vực chung, cụ thể là tên Và e-mail. Để tránh sự dư thừa này, bạn có thể tạo một mô hình riêng để chứa các trường chung trong Khách hàng Và Người bán mô hình và làm cho nó trừu tượng.
class UserInfo(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField() class Meta:
abstract = True
Đoạn mã trên xác định một mô hình mới và thiết lập trừu tượng gán cho ĐÚNG VẬY. Điều này có nghĩa là mô hình sẽ trừu tượng và Django sẽ không tạo bảng trong cơ sở dữ liệu.
Bạn có thể viết lại Khách hàng Và Người bán mô hình như thế này:
class Customer(UserInfo):
customer_id = models.IntegerField() class Seller(UserInfo):
seller_id = models.IntegerField()
Trong đoạn mã trên, Khách hàng Và người bán Các mô hình kế thừa từ Thông tin người dùng mô hình thay vì mô hình.Mô hình.
Bạn có thể xem các mô hình của mình trong bảng quản trị bằng cách đăng ký chúng trong quản trị viên.py tập tin như thế này:
from .models import Customer, Selleradmin.site.register(Customer)
admin.site.register(Seller)
Di chuyển các chế độ của bạn và khởi động máy chủ phát triển của bạn bằng cách chạy phần sau trên dòng lệnh:
python manage.py makemigrations
&& python manage.py migrate
&& python manage.py runserver
Điều hướng đến trang quản trị của bạn và đăng nhập bằng thông tin chi tiết về siêu người dùng của bạn. Bạn sẽ thấy cả ba trường cho mỗi mô hình.
Trong ví dụ này, Django đã tạo một bảng cho Khách hàng Và Người bán người mẫu. Bạn có thể thấy rằng Thông tin người dùng mô hình không có bảng vì nó trừu tượng.
Kế thừa nhiều bảng
Bạn có thể sử dụng kế thừa nhiều bảng khi mô hình mẹ cũng cần tồn tại dưới dạng một bảng trong cơ sở dữ liệu cùng với mô hình con.
Không giống như kế thừa lớp cơ sở trừu tượng, trong đó mô hình mẹ sẽ không phải là một bảng trong cơ sở dữ liệu, kế thừa nhiều bảng tạo ra một bảng cho mô hình mẹ.
Trong kế thừa nhiều bảng, mô hình con kế thừa tất cả các trường và phương thức từ mô hình mẹ của nó và thêm các trường cụ thể của nó. Khóa ngoại giúp thiết lập mối quan hệ mô hình giữa các mô hình cha và con.
Đây là một ví dụ về kế thừa nhiều bảng:
class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100) def get_name(self):
return f"{self.first_name} {self.last_name}"
class Meta:
abstract = True
class Employee(Person):
employee_id = models.CharField(max_length=20)
department = models.CharField(max_length=100)
salary = models.FloatField()
dob = models.DateField()
class Manager(Employee):
title = models.CharField(max_length=100)
Đoạn mã này xác định ba mô hình. Mô hình đầu tiên, được gọi là Người, là trừu tượng. Nó chỉ xác định tên và họ của một người.
Mô hình thứ hai, được gọi là Người lao độngkế thừa các trường của Người nhưng định nghĩa các trường bổ sung. Các Người lao động mô hình không trừu tượng, vì vậy nó sẽ có bảng của nó trong cơ sở dữ liệu.
Mô hình cuối cùng, được gọi là Giám đốckế thừa các trường của Người lao động mô hình và thêm một lĩnh vực gọi là tiêu đề.
Mối quan hệ giữa các Người lao động Và Giám đốc các mô hình được gọi là Kế thừa nhiều bảng. Di chuyển các mô hình của bạn, đăng ký chúng trong quản trị viên.py, khởi động máy chủ của bạn và điều hướng đến bảng quản trị. Bạn sẽ thấy hai bảng được tạo bởi Django.
Khi bạn cố gắng thêm một người quản lý mới, bạn sẽ nhận thấy rằng nó có tất cả các trường từ Người lao động model cũng như trường tùy chỉnh của chính nó.
Mô hình ủy quyền
Mô hình proxy giúp bạn tạo mô hình mới mở rộng từ mô hình hiện có mà không cần tạo bảng cơ sở dữ liệu mới. Trong kiểu kế thừa mô hình này, mô hình proxy và mô hình gốc sẽ chia sẻ cùng một bảng. Sử dụng các mô hình proxy, bạn có thể thực hiện những việc như tạo mô hình tùy chỉnh và thay đổi trình quản lý mặc định.
Bạn có thể tạo một mô hình proxy bằng cách thêm proxy=True bên trong meta lớp học. Đây là một ví dụ:
class ProxyModel(BaseModel): class Meta:
proxy = True
Cách sử dụng điển hình của mô hình proxy là thích hợp khi mô hình cơ sở tồn tại và cần phải tạo một phiên bản chuyên biệt của mô hình đó với chức năng bổ sung. Đây là một ví dụ cơ bản:
class Post(models.Model):
title = models.CharField(max_length=30)
author = models.CharField(max_length=30) def __str__(self):
return self.title
class ProxyPost(Post):
class Meta:
proxy = True
Đoạn mã này xác định hai mô hình: Bưu kiện Và Bài viết của tôi. Các Bưu kiện mô hình xác định hai trường cho tiêu đề và tác giả. Các ProxyPost mô hình kế thừa từ Bưu kiện người mẫu.
Di chuyển các mô hình trên và thêm một bài đăng mới vào bảng được tạo cho Bưu kiện người mẫu.
Sau khi thêm bài đăng, hãy mở Bài đăng ủy quyền bàn. Bạn sẽ tìm thấy bài đăng bạn đã thêm vào Bưu kiện bảng trong đó.
Những thay đổi bạn thực hiện đối với bài đăng trong Bài đăng ủy quyền bảng sẽ ảnh hưởng đến bài đăng tương ứng trong Bưu kiện bàn và ngược lại. Điều này chứng tỏ họ thật sự ngồi chung một bảng.
Bạn có thể sửa đổi str() phương pháp của mô hình proxy:
class ProxyPost(Post): class Meta:
proxy = True
ordering = ["title"]
def __str__(self):
return self.author
Với sửa đổi này, một ProxyPost’s đại diện chuỗi sẽ là tác giả của nó, không phải tiêu đề. Thứ tự của mô hình proxy cũng sẽ theo tiêu đề thay vì trường ID mặc định.
Khi sử dụng các mô hình proxy, bạn nên nhớ rằng bạn không thể thêm các trường tùy chỉnh vào mô hình proxy của mình. Trường hợp sử dụng chính của các mô hình proxy là khi bạn muốn một mô hình hỗ trợ nhiều hành vi.
Các mô hình proxy giúp bạn thay đổi hành vi của một mô hình hiện có mà không cần sửa đổi các trường hoặc cấu trúc bảng cơ sở dữ liệu bên dưới của nó.
Sử dụng kế thừa mô hình cho khả năng tái sử dụng mã và cơ cấu tổ chức
Bằng cách sử dụng các kỹ thuật kế thừa mô hình khác nhau, bạn có thể dễ dàng tạo mã có tổ chức và tái sử dụng cho dự án của mình.
Kế thừa mô hình tránh mã dư thừa và nâng cao khả năng bảo trì cũng như khả năng mở rộng mã của bạn. Nó cũng giúp bạn dễ dàng điều hướng mã của mình, do đó thúc đẩy sự hợp tác hiệu quả giữa các nhóm phát triển.
Ngoài tính năng kế thừa mô hình, Django còn cung cấp tính năng kế thừa mẫu, đây là một cách tuyệt vời để quản lý và sắp xếp các mẫu cho dự án của bạn.