You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.7 KiB
93 lines
3.7 KiB
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
|
|
class Category(models.Model):
|
|
"""非遗分类"""
|
|
name = models.CharField(max_length=100, unique=True, verbose_name="分类名称")
|
|
description = models.TextField(blank=True, verbose_name="分类描述")
|
|
icon = models.CharField(max_length=50, default="🏮", verbose_name="分类图标")
|
|
order = models.IntegerField(default=0, verbose_name="显示顺序")
|
|
|
|
class Meta:
|
|
verbose_name = "非遗分类"
|
|
verbose_name_plural = "非遗分类"
|
|
ordering = ['order']
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class PrimaryTag(models.Model):
|
|
"""一级标签"""
|
|
name = models.CharField(max_length=100, unique=True, verbose_name="标签名称")
|
|
color = models.CharField(max_length=7, default="#8b4513", verbose_name="标签颜色")
|
|
|
|
class Meta:
|
|
verbose_name = "一级标签"
|
|
verbose_name_plural = "一级标签"
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class SecondaryTag(models.Model):
|
|
"""二级标签"""
|
|
TAG_TYPE_CHOICES = [
|
|
('geo', '地理空间'),
|
|
('theme', '主题维度'),
|
|
('project', '非遗项目'),
|
|
('person', '人物传承'),
|
|
('time', '时间节庆'),
|
|
]
|
|
|
|
name = models.CharField(max_length=100, verbose_name="标签名称")
|
|
tag_type = models.CharField(max_length=20, choices=TAG_TYPE_CHOICES, verbose_name="标签类型")
|
|
parent_tag = models.ForeignKey(PrimaryTag, on_delete=models.CASCADE, null=True, blank=True, verbose_name="父级标签")
|
|
|
|
class Meta:
|
|
verbose_name = "二级标签"
|
|
verbose_name_plural = "二级标签"
|
|
|
|
def __str__(self):
|
|
return f"{self.name} ({self.get_tag_type_display()})"
|
|
|
|
class Post(models.Model):
|
|
"""非遗文章"""
|
|
STATUS_CHOICES = [
|
|
('draft', '草稿'),
|
|
('published', '已发布'),
|
|
]
|
|
|
|
title = models.CharField(max_length=200, verbose_name="文章标题")
|
|
content = models.TextField(verbose_name="文章内容")
|
|
excerpt = models.TextField(max_length=300, blank=True, verbose_name="文章摘要")
|
|
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="作者")
|
|
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name="分类")
|
|
primary_tags = models.ManyToManyField(PrimaryTag, blank=True, verbose_name="一级标签")
|
|
secondary_tags = models.ManyToManyField(SecondaryTag, blank=True, verbose_name="二级标签")
|
|
featured_image = models.ImageField(upload_to='posts/%Y/%m/', blank=True, null=True, verbose_name="特色图片")
|
|
views = models.PositiveIntegerField(default=0, verbose_name="阅读量")
|
|
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='published', verbose_name="状态")
|
|
created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
|
updated_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
|
|
|
class Meta:
|
|
verbose_name = "非遗文章"
|
|
verbose_name_plural = "非遗文章"
|
|
ordering = ['-created_time']
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
class Comment(models.Model):
|
|
"""文章评论"""
|
|
post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name="所属文章")
|
|
author = models.CharField(max_length=100, verbose_name="评论者")
|
|
content = models.TextField(verbose_name="评论内容")
|
|
created_time = models.DateTimeField(auto_now_add=True, verbose_name="评论时间")
|
|
|
|
class Meta:
|
|
verbose_name = "评论"
|
|
verbose_name_plural = "评论"
|
|
ordering = ['-created_time']
|
|
|
|
def __str__(self):
|
|
return f'{self.author} 评论了《{self.post.title}》' |