from django.db import models from django.conf import settings from apps.regions.models import Region class Article(models.Model): """Model for articles.""" ARTICLE_TYPE_CHOICES = [ ('basic', '城市信息'), ('history', '历史'), ('culture', '文化'), ('practical', '实用'), ('life', '生活'), ] STATUS_CHOICES = [ ('draft', '草稿'), ('pending_moderator', '待版主审核'), ('pending_ai', '待AI审核'), ('published', '已发布'), ('rejected', '已拒绝'), ] MODERATOR_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] AI_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] title = models.CharField(max_length=200, verbose_name='标题') content = models.TextField(verbose_name='内容') region = models.ForeignKey( Region, on_delete=models.CASCADE, related_name='articles', verbose_name='所属版块' ) article_type = models.CharField( max_length=20, choices=ARTICLE_TYPE_CHOICES, verbose_name='内容类型' ) author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='articles', verbose_name='提交者' ) # Moderator review moderator_reviewer = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name='moderated_articles', 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 = 'articles' verbose_name = '文章' verbose_name_plural = '文章' ordering = ['-created_at'] def __str__(self): return self.title def submit_for_review(self): """Submit article for moderator review.""" self.publish_status = 'pending_moderator' self.save() def approve_moderator(self, reviewer, reason=''): """Approve article 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 article 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 article 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 article by AI.""" self.ai_status = 'rejected' self.ai_reviewed_at = timezone.now() self.ai_rejection_reason = reason self.publish_status = 'rejected' self.save()