Files
chengshishouce/backend/apps/articles/models.py

144 lines
4.4 KiB
Python
Raw Normal View History

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()