from django.db import models from common.models import SoftDeleteModel class News(SoftDeleteModel): """新闻。""" title = models.CharField(max_length=500, verbose_name="标题") content = models.TextField(blank=True, default="", verbose_name="正文") publication_time = models.CharField( max_length=32, blank=True, default="", verbose_name="发布时间" ) rank = models.IntegerField(null=True, blank=True, verbose_name="排序") read_num = models.PositiveIntegerField(default=0, verbose_name="阅读数") collect_num = models.PositiveIntegerField(default=0, verbose_name="收藏数") like_num = models.PositiveIntegerField(default=0, verbose_name="点赞数") share_num = models.PositiveIntegerField(default=0, verbose_name="分享数") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["rank", "-id"] verbose_name = "新闻" verbose_name_plural = verbose_name def __str__(self): return self.title class Publication(SoftDeleteModel): """最新发表 / 资源。""" title = models.CharField(max_length=500, verbose_name="标题") content = models.TextField(blank=True, default="", verbose_name="正文") url = models.URLField(blank=True, default="", verbose_name="链接") publication_time = models.CharField( max_length=32, blank=True, default="", verbose_name="发布时间" ) rank = models.IntegerField(null=True, blank=True, verbose_name="排序") read_num = models.PositiveIntegerField(default=0, verbose_name="阅读数") collect_num = models.PositiveIntegerField(default=0, verbose_name="收藏数") like_num = models.PositiveIntegerField(default=0, verbose_name="点赞数") share_num = models.PositiveIntegerField(default=0, verbose_name="分享数") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["rank", "-id"] verbose_name = "发表资源" verbose_name_plural = verbose_name def __str__(self): return self.title class Report(SoftDeleteModel): """年度报告。""" name = models.CharField(max_length=200, verbose_name="名称") year = models.IntegerField(verbose_name="年份") logo = models.URLField(blank=True, default="", verbose_name="封面") file_path = models.URLField(blank=True, default="", verbose_name="文件地址") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["-year", "id"] verbose_name = "年度报告" verbose_name_plural = verbose_name def __str__(self): return f"{self.name} ({self.year})" class AboutInfo(SoftDeleteModel): """关于我们(单例式配置,可多条取最新)。""" introduction = models.TextField(blank=True, default="", verbose_name="简介") work_group = models.JSONField(default=list, blank=True, verbose_name="工作组") product = models.JSONField(default=list, blank=True, verbose_name="产品") growing_path = models.TextField(blank=True, default="", verbose_name="成长路径") img_path = models.URLField(blank=True, default="", verbose_name="图片") rating_method = models.TextField(blank=True, default="", verbose_name="评价方法") class Meta: ordering = ["-id"] verbose_name = "关于我们" verbose_name_plural = verbose_name def __str__(self): return f"About#{self.pk}" class CopyrightInfo(SoftDeleteModel): """版权声明。""" copyright = models.TextField(blank=True, default="", verbose_name="版权") responsibility = models.TextField(blank=True, default="", verbose_name="免责") email = models.EmailField(blank=True, default="", verbose_name="邮箱") remark = models.TextField(blank=True, default="", verbose_name="备注") class Meta: ordering = ["-id"] verbose_name = "版权声明" verbose_name_plural = verbose_name def __str__(self): return f"Copyright#{self.pk}" class ContactUs(SoftDeleteModel): """联系我们。""" serve_icon = models.URLField(blank=True, default="", verbose_name="服务图标") serve_desc = models.TextField(blank=True, default="", verbose_name="服务说明") serve_phone = models.CharField(max_length=100, blank=True, default="", verbose_name="服务电话") serve_email = models.EmailField(blank=True, default="", verbose_name="服务邮箱") serve_address = models.CharField(max_length=500, blank=True, default="", verbose_name="服务地址") media_icon = models.URLField(blank=True, default="", verbose_name="媒体图标") media_desc = models.TextField(blank=True, default="", verbose_name="媒体说明") media_phone = models.CharField(max_length=100, blank=True, default="", verbose_name="媒体电话") media_email = models.EmailField(blank=True, default="", verbose_name="媒体邮箱") media_address = models.CharField(max_length=500, blank=True, default="", verbose_name="媒体地址") star_icon = models.URLField(blank=True, default="", verbose_name="STAR 图标") star_desc = models.TextField(blank=True, default="", verbose_name="STAR 说明") star_phone = models.CharField(max_length=100, blank=True, default="", verbose_name="STAR 电话") star_email = models.EmailField(blank=True, default="", verbose_name="STAR 邮箱") star_address = models.CharField(max_length=500, blank=True, default="", verbose_name="STAR 地址") class Meta: ordering = ["-id"] verbose_name = "联系我们" verbose_name_plural = verbose_name def __str__(self): return f"Contact#{self.pk}" class ExtendLink(SoftDeleteModel): """外部链接。""" name = models.CharField(max_length=200, verbose_name="名称") link_url = models.URLField(verbose_name="链接") sort = models.IntegerField(default=0, verbose_name="排序") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["sort", "id"] verbose_name = "外链" verbose_name_plural = verbose_name def __str__(self): return self.name class HomeBanner(SoftDeleteModel): """首页轮播 / 图片位。""" title = models.CharField(max_length=200, blank=True, default="", verbose_name="标题") image_url = models.CharField(max_length=500, verbose_name="图片地址") link_url = models.CharField(max_length=500, blank=True, default="", verbose_name="跳转链接") sort = models.IntegerField(default=0, verbose_name="排序") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["sort", "id"] verbose_name = "首页轮播" verbose_name_plural = verbose_name def __str__(self): return self.title or self.image_url class Keyword(SoftDeleteModel): """热搜词。""" name = models.CharField(max_length=200, verbose_name="关键词") search_hot = models.PositiveIntegerField(default=0, verbose_name="热度") is_show = models.BooleanField(default=True, verbose_name="展示") class Meta: ordering = ["-search_hot", "id"] verbose_name = "热搜词" verbose_name_plural = verbose_name def __str__(self): return self.name