Các tín hiệu lưu / xóa thường thuận lợi trong các tình huống mà bạn cần thực hiện các thay đổi không hoàn toàn cụ thể cho mô hình được đề cập hoặc có thể được áp dụng cho các mô hình có điểm chung hoặc có thể được định cấu hình để sử dụng trên các mô hình.
Một nhiệm vụ phổ biến trong save
các phương thức bị ghi đè là tự động tạo ra các sên từ một số trường văn bản trong một mô hình. Đó là một ví dụ về cái gì đó, nếu bạn cần triển khai nó cho một số mô hình, sẽ có lợi khi sử dụng một pre_save
tín hiệu, trong đó trình xử lý tín hiệu có thể lấy tên của trường slug và tên của trường để tạo slug từ đó. Khi bạn đã có một cái gì đó như vậy tại chỗ, bất kỳ chức năng nâng cao nào bạn đưa vào cũng sẽ áp dụng cho tất cả các mô hình - ví dụ: tra cứu slug bạn sắp thêm cho loại mô hình được đề cập, để đảm bảo tính duy nhất.
Các ứng dụng có thể tái sử dụng thường được hưởng lợi từ việc sử dụng các tín hiệu - nếu chức năng mà chúng cung cấp có thể được áp dụng cho bất kỳ mô hình nào, thì nói chung (trừ khi không thể tránh khỏi), họ sẽ không muốn người dùng phải trực tiếp sửa đổi mô hình của họ để hưởng lợi từ nó.
Ví dụ: với django-mptt , tôi đã sử dụng pre_save
tín hiệu để quản lý một tập hợp các trường mô tả cấu trúc cây cho mô hình sắp được tạo hoặc cập nhật và pre_delete
tín hiệu để loại bỏ chi tiết cấu trúc cây cho đối tượng đang bị xóa và toàn bộ cây con của các đối tượng trước nó và chúng bị xóa. Do việc sử dụng các tín hiệu, người dùng không phải thêm hoặc sửa đổi save
hoặc delete
các phương pháp trên mô hình của họ để thực hiện việc quản lý này cho họ, họ chỉ cần cho django-mptt biết họ muốn nó quản lý mô hình nào.