zoukankan      html  css  js  c++  java
  • BBS项目 基本表关系

    from django.db import models

    # Create your models here.

    from django.contrib.auth.models import AbstractUser

    #用户表
    #继承了AbstractUser,添加我们需要的字段,手机号,头像,一对一关系
    class UserInfo(AbstractUser):
    nid=models.AutoField(primary_key=True)
    phone=models.CharField(max_length=11,null=True,unique=True)
    avatar=models.FileField(upload_to="avatars/",default="avatars/default.png")
    blog=models.OneToOneField(to="Blog",to_field='nid',null=True)

    #定义__str__方法,直接输出对象名时,打印的是username的值
    def __str__(self):
    return self.username

    class Meta:
    #verbose_name 给模型起一个更可读性的名字
    verbose_name = "用户信息"
    #verbose_name_plural 模型的复数形式指定
    verbose_name_plural = verbose_name

    #博客表
    #创建博客标题 /创建博客主题
    class Blog(models.Model):
    nid=models.AutoField(primary_key=True)
    title=models.CharField(max_length=64) #博客标题
    theme=models.CharField(max_length=32) #博客主题

    def __str__(self):
    return self.title

    class Mede:
    verbose_name="博客"
    verbose_name_plural=verbose_name


    #个人博客分类表
    #创建分类标题/外键关联博客,一个博客站点可以有多个分类
    #建立 与 博客一对多关系 一个博客里有多个分类
    class Category(models.Model):
    nid=models.AutoField(primary_key=True)
    title=models.CharField(max_length=64)
    blog=models.ForeignKey(to="Blog",to_field="nid")

    def __str__(self):
    return self.title

    class Mede:
    verbose_name="文章分类"
    verbose_name_plural=verbose_name


    #标签
    #创造标签名/所属博客
    ##建立与博客一对多关系 一个博客可以标记多个标签
    class Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    blog = models.ForeignKey(to="Blog", to_field="nid")

    def __str__(self):
    return self.title

    class Meta:
    verbose_name = "标签"
    verbose_name_plural = verbose_name


    #文章
    # 创建 文章标题/文章描述/创建时间
    #建立与博客分类一对多关系 一个博客分类里有多个文章
    #建立与用户一对多关系 一个用户可以写多个文章
    #建立多对多关联 文章和标签可以互相有多个
    class Article(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50)
    desc = models.CharField(max_length=255)
    create_time = models.DateTimeField(auto_now_add=True)
    category = models.ForeignKey(to="Category", to_field="nid", null=True)

    user = models.ForeignKey(to="UserInfo")

    tags = models.ManyToManyField(
    to="Tag",
    through="Article2Tag",
    through_fields=("article", "tag"),
    )

    def __str__(self):
    return self.title

    class Meta:
    verbose_name = "文章"
    verbose_name_plural = verbose_name


    #文章和标签的多对多关系表
    class Article2Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(to="Article", to_field="nid")
    tag = models.ForeignKey(to="Tag", to_field="nid")

    def __str__(self):
    return "{}-{}".format(self.article, self.tag)

    class Meta:
    unique_together = (("article", "tag"),)
    verbose_name = "文章-标签"
    verbose_name_plural = verbose_name


    #文章详情表
    #创建文本类型
    #建立与文章一对一关联,一个文章,只有一个文本内容
    class ArticleDetail(models.Model):
    nid = models.AutoField(primary_key=True)
    content = models.TextField()
    article = models.OneToOneField(to="Article", to_field="nid")

    class Meta:
    verbose_name = "文章详情"
    verbose_name_plural = verbose_name

    #点赞表
    #创建布尔型是踩还是赞字段
    #建立与用户一对多关联,一个用户可以点赞多篇文章
    #建立与文章一对多关联,一个片文章可以被点多个赞
    class ArticleUpDown(models.Model):
    nid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to="UserInfo", null=True)
    article = models.ForeignKey(to="Article", null=True)
    is_up = models.BooleanField(default=True)

    class Meta:
    unique_together = (("article", "user"),)
    verbose_name = "点赞"
    verbose_name_plural = verbose_name

    #评论表
    #创建评论内容字段/评论时间字段
    #建立与用户一对多关联,一个用户可以评论多篇文章
    #建立与文章一对多关联,一个片文章可以被多个用户评论
    #建立与自己一对多关联,一条评论可以被多人评论
    class Comment(models.Model):
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(to="Article", to_field="nid")
    user = models.ForeignKey(to="UserInfo")
    content = models.CharField(max_length=255) # 评论内容
    create_time = models.DateTimeField(auto_now_add=True)
    parent_comment = models.ForeignKey("self", null=True)

    def __str__(self):
    return self.content

    class Meta:
    verbose_name = "评论"
    verbose_name_plural = verbose_name
  • 相关阅读:
    How to provide highlighting with Spring data elasticsearch
    Android——仿QQ聊天撒花特效
    Android 仿新版QQ的tab下面拖拽标记为已读的效果
    GitHub控件之BadgeView(数字提醒)
    Android之基于百度云推送IM
    Android消息推送完美解决方案全析
    android asmack 注册 登陆 聊天 多人聊天室 文件传输
    android:TextAppearance.Material.Widget.Button.Inverse问题
    Android 高仿微信实时聊天 基于百度云推送
    Gradle DSL method not found: 'android()
  • 原文地址:https://www.cnblogs.com/yangli0504/p/9255452.html
Copyright © 2011-2022 走看看