28 lines
1.4 KiB
Python
28 lines
1.4 KiB
Python
"""
|
|
سیگنال عمومیِ تغییر Status، مستقل از هر اپ خاص (مثل الگوی notifications که
|
|
هیچ اپی بهش رفرنس نمیده، ولی برعکسش: اینجا خودِ اپها چیزی از statuslog
|
|
import نمیکنن جز همین سیگنال، و منطق ثبت لاگ کاملاً داخل statuslog میمونه).
|
|
|
|
هر اپی که یک فیلد status داره (Order، Subscription، UserOffer، در آینده
|
|
پیشرفت درس/دوره و ...) موقع تغییر status باید این سیگنال رو send کنه:
|
|
|
|
from statuslog.signals import status_changed
|
|
status_changed.send(
|
|
sender='payment.Order', # رشتهی label مدل، نه خودِ کلاس
|
|
object_id=order.id,
|
|
old_status=old_status,
|
|
new_status=order.status,
|
|
event='payment_webhook_paid', # چه اتفاقی باعث تغییر شده
|
|
user_id=order.user_id, # اختیاری
|
|
)
|
|
|
|
چون send با sender رشتهای (نه کلاس مدل) صدا زده میشه، هیچ اپی لازم نیست
|
|
مدل واقعیِ اپ دیگه رو import کنه؛ دقیقاً همون اصل «ارجاع سبک، بدون FK واقعی»
|
|
که در کل پروژه رعایت شده.
|
|
"""
|
|
from django.dispatch import Signal
|
|
|
|
# kwargs: sender (str, مثل 'payment.Order')، object_id، old_status، new_status،
|
|
# event، user_id (اختیاری)
|
|
status_changed = Signal()
|