Bắt đầu bằng cách xác định tín hiệu tùy chỉnh. Tín hiệu tùy chỉnh ở đây là một lớp con của django.dispatch.Signal
. Mã này có thể sống ở app/signals.py
.
from django.dispatch import Signal
user_address_changed = Signal(providing_args=["user"])
Tiếp theo, hãy đảm bảo bạn gửi tín hiệu này khi thay đổi địa chỉ của người dùng. Tùy thuộc vào cách bạn đã xác định User
và Address
điều này có thể được thực hiện ở những nơi khác nhau. Giả sử rằng có một chế độ xem cho phép người dùng cập nhật các mô hình Address
của họ. Mã này có lẽ là trong app/views.py
.
from app import signals
def update_address(request, *args, **kwargs):
# all the changes go well.
signals.user_address_changed.send(sender=None, user=request.user)
# Render to template etc.
Bây giờ bạn cần thiết lập bộ thu cho tín hiệu này.
from app.signals import user_address_changed
def handle_user_address_change(sender, **kwargs):
"""Trap the signal and do whatever is needed"""
user = kwargs['user']
# Write to log, update db, send mail etc.
user_address_changed.connect(handle_user_address_change)
Cập nhật
(Sau khi đọc comment; OP giải thích rằng không có cái nhìn riêng biệt mà cập nhật địa chỉ) Trong trường hợp đó bạn có thể thử để ghi đè User.save()
để gửi ra tín hiệu này. Tôi nói "thử" vì tôi không biết liệu bạn có đang sử dụng lớp học User
của riêng bạn hay auth.User
.
Nguồn
2010-08-19 11:09:54
cảm ơn manoj trả lời của bạn, điều này sẽ hoạt động tốt cho các bản cập nhật của người dùng. Nhưng nếu chúng tôi thay đổi địa chỉ thông qua bảng quản trị, chế độ xem này sẽ không được gọi và do đó tín hiệu này sẽ không được gửi. –
Đã cập nhật câu trả lời. Xem ở trên. –
một mô hình riêng biệt với người dùng là khóa ngoài .. vì vậy tôi đoán User.save() là không thể trong trường hợp này? –