from django.db import models from django.conf import settings class Comment(models.Model): """Model for comments.""" AI_STATUS_CHOICES = [ ('pending', '待审核'), ('approved', '通过'), ('rejected', '拒绝'), ] TARGET_TYPE_CHOICES = [ ('article', '文章'), ('service', '特色服务'), ] content = models.TextField(verbose_name='评论内容') target_type = models.CharField( max_length=20, choices=TARGET_TYPE_CHOICES, verbose_name='评论对象类型' ) target_id = models.PositiveIntegerField(verbose_name='评论对象ID') author = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='comments', verbose_name='评论者' ) ai_status = models.CharField( max_length=20, choices=AI_STATUS_CHOICES, default='pending', verbose_name='AI审核状态' ) ai_rejection_reason = models.TextField(null=True, blank=True, verbose_name='AI拒绝原因') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') class Meta: db_table = 'comments' verbose_name = '评论' verbose_name_plural = '评论' ordering = ['-created_at'] def __str__(self): return f'{self.author.username} on {self.target_type} {self.target_id}' def approve_ai(self): """Approve comment by AI.""" self.ai_status = 'approved' self.save() def reject_ai(self, reason): """Reject comment by AI.""" self.ai_status = 'rejected' self.ai_rejection_reason = reason self.save() class Rating(models.Model): """Model for ratings.""" TARGET_TYPE_CHOICES = [ ('region', '城市'), ('service', '特色服务'), ] user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='ratings', verbose_name='用户' ) target_type = models.CharField( max_length=20, choices=TARGET_TYPE_CHOICES, verbose_name='评分对象类型' ) target_id = models.PositiveIntegerField(verbose_name='评分对象ID') score = models.PositiveSmallIntegerField(verbose_name='评分值') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') class Meta: db_table = 'ratings' verbose_name = '评分' verbose_name_plural = '评分' unique_together = ['user', 'target_type', 'target_id'] ordering = ['-created_at'] def __str__(self): return f'{self.user.username} rated {self.target_type} {self.target_id}: {self.score}' class Like(models.Model): """Model for likes.""" TARGET_TYPE_CHOICES = [ ('article', '文章'), ('service', '特色服务'), ] user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='likes', verbose_name='用户' ) target_type = models.CharField( max_length=20, choices=TARGET_TYPE_CHOICES, verbose_name='点赞对象类型' ) target_id = models.PositiveIntegerField(verbose_name='点赞对象ID') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') class Meta: db_table = 'likes' verbose_name = '点赞' verbose_name_plural = '点赞' unique_together = ['user', 'target_type', 'target_id'] ordering = ['-created_at'] def __str__(self): return f'{self.user.username} likes {self.target_type} {self.target_id}' class Favorite(models.Model): """Model for favorites.""" TARGET_TYPE_CHOICES = [ ('region', '城市'), ('service', '特色服务'), ] user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='favorites', verbose_name='用户' ) target_type = models.CharField( max_length=20, choices=TARGET_TYPE_CHOICES, verbose_name='收藏对象类型' ) target_id = models.PositiveIntegerField(verbose_name='收藏对象ID') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') class Meta: db_table = 'favorites' verbose_name = '收藏' verbose_name_plural = '收藏' unique_together = ['user', 'target_type', 'target_id'] ordering = ['-created_at'] def __str__(self): return f'{self.user.username} favorited {self.target_type} {self.target_id}'