zoukankan      html  css  js  c++  java
  • 02 设计表结构

    编辑本博客

    设计表机构

    from django.db import models
    
    # Create your models here.
    from django.contrib.auth.models import AbstractUser,User
    class UserInfo(AbstractUser):
        nid=models.AutoField(primary_key=True)
        telephone=models.CharField(max_length=11,null=True,unique=True)
        avatar=models.FileField(upload_to='avatars/',default='/avatars/default.png')#用户头像
        create_time=models.DateTimeField(verbose_name='创建时间',auto_now_add=True)#用户注册时间,生成表记录时自动添加
        blog=models.OneToOneField(to='Blog',to_field='nid',null=True,unique=True,on_delete='CASCADE')
        def __str__(self):
            return self.username
    
    class Blog(models.Model):
        nid=models.AutoField(primary_key=True)
        title=models.CharField(verbose_name="个人博客标题",max_length=64)
        site_name=models.CharField(verbose_name="站点名称",max_length=64)
        theme=models.CharField(verbose_name='博客主题样式',max_length=32)
        def __str__(self):
            return self.title
    #分类表
    class Category(models.Model):
        nid = models.AutoField(primary_key=True)
        title=models.CharField(verbose_name="分类标题",max_length=32)
        blog=models.ForeignKey(verbose_name="所属博客",to="Blog",to_field="nid",on_delete='CASCADE')
        def __str__(self):
            return self.title
    #标签表
    class Tag(models.Model):
        nid=models.AutoField(primary_key=True)
        title=models.CharField(verbose_name="标签名称",max_length=32)
        blog=models.ForeignKey(verbose_name='所属博客',to="Blog",to_field='nid',on_delete='CASCADE')
        def __str__(self):
            return self.title
    
    #文章表
    class Article(models.Model):
        nid = models.AutoField(primary_key=True)
        title=models.CharField(verbose_name='文章标题',max_length=50)
        desc=models.CharField(verbose_name='文章描述',max_length=128)
        create_time=models.DateTimeField(verbose_name="文章创建时间",auto_now_add=True)
        content = models.TextField()
    
        comment_count=models.IntegerField(default=0)
        up_count=models.IntegerField(default=0)
        down_count=models.IntegerField(default=0)
    
        user=models.ForeignKey(verbose_name='作者',to="UserInfo",to_field='nid',on_delete='CASCADE')
        category=models.ForeignKey(verbose_name='文章分类',to='Category',to_field='nid',null=True,on_delete='CASCADE')
        tags=models.ManyToManyField(to='Tag',through='Atricle2Tag',through_fields=('article','tag'))
    
        def __str__(self):
            return self.title
    class Atricle2Tag(models.Model):
        nid=models.AutoField(primary_key=True)
        article=models.ForeignKey(verbose_name='文章',to='Article',to_field='nid',on_delete='CASCADE')
        tag=models.ForeignKey(verbose_name='标签',to='Tag',to_field='nid',on_delete='CASCADE')
        class Meta:
            #联合唯一,也可以理解为联合主键
            unique_together=[('article','tag'),]
        def __str__(self):
            v=self.article.title+'---'+self.tag.title
            return v
    #点赞表
    class ArticleUpDown(models.Model):
        nid=models.AutoField(primary_key=True)
        user=models.ForeignKey(to='UserInfo',to_field='nid',null=True,on_delete='CASCADE')
        article=models.ForeignKey(to='Article',to_field='nid',null=True,on_delete='CASCADE')
        is_up=models.BooleanField(default=True)
        class Meta:
            #联合唯一,一张表同一个用户只能点赞一次
            unique_together=[('article','user'),]
    
    #评论表
    class Comment(models.Model):
        nid=models.AutoField(primary_key=True)
        article=models.ForeignKey(verbose_name="评论文章",to='Article',to_field='nid',on_delete='CASCADE')
        user=models.ForeignKey(verbose_name="评论用户",to='UserInfo',to_field='nid',on_delete='CASCADE')
        content=models.CharField(verbose_name="评论内容",max_length=128)
        create_time=models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
        parent_comment=models.ForeignKey(to='Comment',to_field='nid',null=True,on_delete='CASCADE')
        # parent_comment=models.ForeignKey(to='self',null=True)
        def __str__(self):
            return self.content
    View Code

    数据库迁移

    配置mysql数据库

    DATABASES={
        'default':{
            'ENGINE':'django.db.backends.mysql',
            'NAME':'cnblog',
            'USER':'root',
            'PASSWORD':'123.com',
            'HOST':'127.0.0.1',
            'PORT':3306
        }
    }
    View Code

    配置AUTH_USER_MODEL

    因为我们使用的是自己的UserInfo并继承于AbstractUser类进行认证,所以要告知django

    AUTH_USER_MODEL='app.UserInfo'

    迁移数据库

    python manage.py makemigrations

    python manage.py migrate

  • 相关阅读:
    Java8之Optional用法举例
    Java多线程之ThreadPoolTaskExecutor用法
    Java多线程之ExecutorService使用说明
    CountDownLatch同步计数器使用说明
    读取excel文件内容 (hutool-poi)
    字符串工具-StrUtil(hutool)
    IDEA 常用插件
    在 Gerrit 仓库中创建空分支
    Linux idea 输入中文出现下划线乱码
    ArchLinux 修改 MariaDB 数据库路径后启动报错 Can't create test file /xxxxx/xxxxx-test
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9356968.html
Copyright © 2011-2022 走看看