from django.db import models from django.conf import settings from django.utils import timezone class FeaturedService(models.Model): """特色服务表""" CATEGORY_CHOICES = [ ('clothing', '衣'), ('food', '食'), ('housing', '住'), ('transportation', '行'), ('entertainment', '娱乐'), ('tourism', '旅游'), ('culture', '文化'), ] AUDIT_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] PUBLISH_STATUS_CHOICES = [ ('draft', '未发布'), ('published', '已发布'), ] name = models.CharField('服务名称', max_length=200) description = models.TextField('服务描述') region = models.ForeignKey( 'regions.Region', on_delete=models.CASCADE, related_name='featured_services', verbose_name='所属区域' ) category = models.CharField('服务分类', max_length=20, choices=CATEGORY_CHOICES) # 详细信息 address = models.CharField('地址', max_length=300, blank=True) contact = models.CharField('联系方式', max_length=100, blank=True) website = models.URLField('网站', blank=True) price_range = models.CharField('价格区间', max_length=50, blank=True) opening_hours = models.TextField('营业时间', blank=True) # 提交者 submitter = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='submitted_services', verbose_name='提交者' ) # 版主审核 moderator_reviewer = models.ForeignKey( settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL, related_name='reviewed_services', verbose_name='版主审核人' ) moderator_reviewed_at = models.DateTimeField('版主审核时间', null=True, blank=True) moderator_status = models.CharField('版主审核状态', max_length=20, choices=AUDIT_STATUS_CHOICES, default='pending') moderator_comment = models.TextField('版主审核意见', blank=True) # AI 审核 ai_status = models.CharField('AI 审核状态', max_length=20, choices=AUDIT_STATUS_CHOICES, default='pending') ai_reviewed_at = models.DateTimeField('AI 审核时间', null=True, blank=True) ai_comment = models.TextField('AI 审核意见', blank=True) # 发布状态 publish_status = models.CharField('发布状态', max_length=20, choices=PUBLISH_STATUS_CHOICES, default='draft') # 统计数据 view_count = models.PositiveIntegerField('浏览次数', default=0) rating_average = models.DecimalField('平均评分', max_digits=3, decimal_places=2, default=0) rating_count = models.PositiveIntegerField('评分次数', default=0) created_at = models.DateTimeField('创建时间', auto_now_add=True) updated_at = models.DateTimeField('更新时间', auto_now=True) class Meta: verbose_name = '特色服务' verbose_name_plural = '特色服务' ordering = ['-created_at'] def __str__(self): return self.name def submit_for_moderator_review(self): """提交版主审核""" self.moderator_status = 'pending' self.save() def approve_by_moderator(self, moderator, comment=''): """版主审核通过""" self.moderator_reviewer = moderator self.moderator_status = 'approved' self.moderator_comment = comment self.moderator_reviewed_at = timezone.now() self.save() # 自动提交到 AI 审核 self.submit_for_ai_review() def reject_by_moderator(self, moderator, comment=''): """版主审核拒绝""" self.moderator_reviewer = moderator self.moderator_status = 'rejected' self.moderator_comment = comment self.moderator_reviewed_at = timezone.now() self.publish_status = 'draft' self.save() def submit_for_ai_review(self): """提交 AI 审核(版主通过后自动调用)""" if self.moderator_status == 'approved': self.ai_status = 'pending' self.save() def approve_by_ai(self, comment=''): """AI 审核通过""" self.ai_status = 'approved' self.ai_comment = comment self.ai_reviewed_at = timezone.now() self.publish_status = 'published' self.save() def reject_by_ai(self, comment=''): """AI 审核拒绝""" self.ai_status = 'rejected' self.ai_comment = comment self.ai_reviewed_at = timezone.now() self.publish_status = 'draft' self.save() def update_rating(self): """更新平均评分""" ratings = self.ratings.all() if ratings.exists(): self.rating_average = sum(r.score for r in ratings) / ratings.count() self.rating_count = ratings.count() self.save()