1. 基表
class BaseModel(models.Model):
is_show = models.BooleanField(verbose_name='展示', default=True)
is_delete = models.BooleanField(verbose_name='删除', default=False)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
update_time = models.DateTimeField(verbose_name='更新时间', auto_now=True)
order = models.SmallIntegerField(verbose_name='排序', default=1)
class Meta:
# 抽象表
abstract = True
2. 用户表
class UserInfo(BaseModel):
"""用户表"""
phone = models.CharField(verbose_name='手机号', max_length=11, unique=True)
token = models.CharField(verbose_name='token', max_length=225, blank=True, null=True)
bucket = models.CharField(verbose_name='桶', max_length=225, blank=True, null=True)
region = models.CharField(verbose_name='区域', max_length=32, default='ap-chengdu')
nickName = models.CharField(verbose_name='微信名称', max_length=225, default='梦')
avatar = models.CharField(verbose_name='头像', max_length=225,
default='19803630852-1645427981-1305448189.cos.ap-chengdu.myqcloud.com/l13c23ek1645803983515.png')
3. Release
class Release(BaseModel):
"""发布"""
position = models.CharField(verbose_name='位置', max_length=225, blank=True, null=True)
content = models.CharField(verbose_name='内容', max_length=225)
# 这三个存数量,做一个优化
release_up = models.BigIntegerField(verbose_name='新闻点赞数量', default=0)
watch_num = models.BigIntegerField(verbose_name='观看人数数量', default=0)
release_num = models.BigIntegerField(verbose_name='评论数量', default=0)
# db_constraint=False db_constraint=False 逻辑上的关联,实质上没有外键联系,增删不会受外键影响,orm查询不影响
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False)
topic = models.ForeignKey(verbose_name='话题', to='Topic', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='topic_release')
# 图片链接拼接
@property
def cover_msg_url(self):
# 每一个对象走一遍
msg_url = self.media.all().filter(is_show=True, is_delete=False).first().cosUrl
# print(msg_url)
return msg_url
"""
v1: model进行处理
# 图片链接拼接
@property
def msg_url(self):
msg_url = self.media.all().filter(is_show=True, is_delete=False).values('cosUrl')
return msg_url
"""
4. Media
class Media(BaseModel):
name = models.CharField(verbose_name='名称', max_length=225, blank=True, null=True)
choice_type = (
(1, "无"),
(2, "图片"),
(3, "视频"),
)
type = models.SmallIntegerField(verbose_name='类型', default=1)
cosUrl = models.CharField(verbose_name='路径', max_length=225, blank=True, null=True)
# db_constraint=False,
release = models.ForeignKey(verbose_name='发布', to='Release', related_name='media', on_delete=models.DO_NOTHING,
null=True, blank=True)
cosETag = models.CharField(verbose_name='校验信息', max_length=225, blank=True, null=True)
cos_media_name = models.CharField(verbose_name='cos图片名称,删除使用', max_length=225, default='1.png')
5. Topic
class Topic(BaseModel):
"""话题"""
name = models.CharField(verbose_name='话题名称', max_length=225)
people_num = models.BigIntegerField(verbose_name='话题关注人数', default=0)
class Meta:
verbose_name = "话题"
verbose_name_plural = "话题"
6. Comment
class Comment(BaseModel):
"""评论表"""
comment = models.CharField(verbose_name='评论内容', max_length=225, null=True, blank=True)
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_new')
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_userinfo')
reply = models.ForeignKey(verbose_name='父评论', to='self', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_reply')
depth = models.PositiveIntegerField(verbose_name='评论深度', default=1)
root = models.PositiveIntegerField(verbose_name='父id', null=True, blank=True)
# 优化表中只存储点赞数量,记录在另一个表中
comment_up = models.BigIntegerField(verbose_name='评论点赞数量', default=0)
7. WatchNum
class WatchNum(BaseModel):
"""浏览记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='watch_num_userinfo')
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='watch_num_new')
8. ReleaseUp
class ReleaseUp(BaseModel):
"""动态点赞记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='ReleaseUp_userinfo')
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='ReleaseUp_new')
9. CommentUp
class CommentUp(BaseModel):
"""评论点赞记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='CommentUp_userinfo')
comments = models.ForeignKey(verbose_name='评论', to='Comment', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='CommentUp_new')