from django.db import models from django.conf import settings from apps.regions.models import Region class FeaturedService(models.Model): """Model for featured services.""" SERVICE_CATEGORY_CHOICES = [ ('clothing', '衣'), ('food', '食'), ('accommodation', '住'), ('transport', '行'), ('entertainment', '娱乐'), ('tourism', '旅游'), ('culture', '文化'), ] STATUS_CHOICES = [ ('draft', '草稿'), ('pending_moderator', '待版主审核'), ('pending_ai', '待AI审核'), ('published', '已发布'), ('rejected', '已拒绝'), ] MODERATOR_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] AI_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] name = models.CharField(max_length=200, verbose_name='服务名称') description = models.TextField(verbose_name='服务描述') region = models.ForeignKey( Region, on_delete=models.CASCADE, related_name='featured_services', verbose_name='所属版块' ) category = models.CharField( max_length=20, choices=SERVICE_CATEGORY_CHOICES, verbose_name='服务分类' ) address = models.CharField(max_length=200, null=True, blank=True, verbose_name='地址') contact = models.CharField(max_length=100, null=True, blank=True, verbose_name='联系方式') image = models.ImageField(upload_to='services/', null=True, blank=True, verbose_name='图片') submitter = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='submitted_services', verbose_name='提交者' ) # Moderator review moderator_reviewer = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='moderated_services', verbose_name='版主审核人' ) moderator_status = models.CharField( max_length=20, choices=MODERATOR_STATUS_CHOICES, default='pending', verbose_name='版主审核状态' ) moderator_reviewed_at = models.DateTimeField(null=True, blank=True, verbose_name='版主审核时间') moderator_rejection_reason = models.TextField(null=True, blank=True, verbose_name='版主拒绝原因') # AI review ai_status = models.CharField( max_length=20, choices=AI_STATUS_CHOICES, default='pending', verbose_name='AI审核状态' ) ai_reviewed_at = models.DateTimeField(null=True, blank=True, verbose_name='AI审核时间') ai_rejection_reason = models.TextField(null=True, blank=True, verbose_name='AI拒绝原因') # Publish status publish_status = models.CharField( max_length=20, choices=STATUS_CHOICES, default='draft', verbose_name='发布状态' ) published_at = models.DateTimeField(null=True, blank=True, verbose_name='发布时间') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: db_table = 'featured_services' verbose_name = '特色服务' verbose_name_plural = '特色服务' ordering = ['-created_at'] def __str__(self): return self.name def submit_for_review(self): """Submit service for moderator review.""" self.publish_status = 'pending_moderator' self.save() def approve_moderator(self, reviewer, reason=''): """Approve service by moderator.""" self.moderator_status = 'approved' self.moderator_reviewer = reviewer self.moderator_reviewed_at = timezone.now() self.moderator_rejection_reason = reason self.publish_status = 'pending_ai' self.save() def reject_moderator(self, reviewer, reason): """Reject service by moderator.""" self.moderator_status = 'rejected' self.moderator_reviewer = reviewer self.moderator_reviewed_at = timezone.now() self.moderator_rejection_reason = reason self.publish_status = 'rejected' self.save() def approve_ai(self, reason=''): """Approve service by AI.""" self.ai_status = 'approved' self.ai_reviewed_at = timezone.now() self.ai_rejection_reason = reason self.publish_status = 'published' self.published_at = timezone.now() self.save() def reject_ai(self, reason): """Reject service by AI.""" self.ai_status = 'rejected' self.ai_reviewed_at = timezone.now() self.ai_rejection_reason = reason self.publish_status = 'rejected' self.save()