from django.db import models class StatusChangeLog(models.Model): """ لاگ عمومیِ تغییر Status هر مدلی در پروژه (Order، Subscription، UserOffer و...) از طریق سیگنال statuslog.signals.status_changed ساخته می‌شه، نه مستقیم. label به‌جای FK واقعی، چون این اپ نباید به هیچ اپ دیگه‌ای وابسته بشه (دقیقاً همون الگوی ارجاع سبک با id که در کل پروژه استفاده شده). """ label = models.CharField(max_length=50, db_index=True) # مثل 'payment.Order' object_id = models.IntegerField(db_index=True) old_status = models.CharField(max_length=30, blank=True) new_status = models.CharField(max_length=30) event = models.CharField(max_length=50) # چه رویدادی باعث تغییر شده user_id = models.IntegerField(null=True, blank=True, db_index=True) created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-created_at'] def __str__(self): return f"{self.label}#{self.object_id}: {self.old_status}→{self.new_status} ({self.event})"