zoukankan      html  css  js  c++  java
  • (33)关于django中路由自带的admin + 建表关系的讲解

    admin是django自带的后台管理,在初始的时候就默认配置好了

    当输入ip地址的时候后面跟admin,就会登陆管理员的后台,这个是django自带的,可以快速管理数据表(增删改查)

    PS:ip地址后/admin就可以登陆,登录前要先创建一个超级用户的账号

    菜单的tools - run manage.py task...

    输入createsuperuser

    根据提示创建,密码必须是8位不能纯数字   root/root123456

    在admin.py文件夹内

    from django.contrib import admin
    from bbs01 import models

    #想要在后台看到那张表,就要把表填在括号里,这样就能在后台看到表
    admin.site.register(models.UserInfo)

    PS:OneToOneField和ForeignKey的区别,就是OneToOneField自带了'unique' = True,而ForeignKey需要手动指定

    建表关系的讲解

    from django.db import models
    from django.contrib.auth.models import AbstractUser


    class UserInfo(AbstractUser):
    '''创建用户信息表'''
    id = models.AutoField(primary_key=True)
    # blank = True 就是admin中表单提交的时候做校验,如果设置成True,就是不校验了,其实就是在后台界面创建用户的账户的时候,只要字段有了blank=True,就可以为空创建,verbose_name就是让表的字段以中文在admin后台显示
    phone = models.CharField(max_length=32, null=True, blank=True,verbose_name='手机号')
    # avatar 就是用户的头像,这个地方只是存一个路径,实际的文件是存在某一个位置,这样表文件不会很大,查询效率也会高
    '''upload_to就是指定文件存储的位置,default就是默认值,如果没有传文件默认就是调用设置的文件'''
    avatar = models.FileField(upload_to='avatar/', default='avatar/default.png') #这样写FileField上传的文件会自动保存到某个位置,然后把路径放到该字段中
    blog = models.OneToOneField(to='Blog', to_field='nid', null=True,blank=True)

    class Meta:
    verbose_name = '用户表' #这个让后台显示我们自定的表名
    verbose_name_plural = verbose_name #因为是外国人设计的,如果不写这个会在名字后面跟一个s


    class Blog(models.Model):
    '''个人站点表'''
    nid = models.AutoField(primary_key=True)
    # title就是地址后面跟的名字,地址后家名字就是跳转到这个名字的页面下
    title = models.CharField(max_length=64)
    site_name = models.CharField(max_length=32)
    # theme就是主题样式
    theme = models.CharField(max_length=64)

    '''print的时候显示'''
    def __str__(self):
    return self.site_name


    class Category(models.Model):
    '''文章分类表'''
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=64)
    #unique =True,唯一的约束性,给哪个添加就表示哪个字段只能等于一个值,通常可以用在账号名、手机号等
    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)

    def __str__(self):
    return self.title


    class Tag(models.Model):
    '''标签表'''
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=64)
    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)

    def __str__(self):
    return self.title


    class Article(models.Model):
    '''文章表'''
    nid = models.AutoField(primary_key=True)
    '''文章标题'''
    title = models.CharField(max_length=64, verbose_name='文章标题')
    # 文章简介
    desc = models.CharField(max_length=255)
    # 文章内容,用TextField,可以存储大文本,就是一个文本类型
    content = models.TextField()
    # 文章的创建时间,auto_now当这条数据修改的时候更新成当前时间,auto_now_add当新增数据的时候更新当前时间,这两个属性只有DateTimeField和DateField才有
    create_time = models.DateTimeField(auto_now_add=True)
    # 文章和个人站点是一对多,一个站点下有多篇文章,所以关联字段写在多的一方
    blog = models.ForeignKey(to='Blog', to_field='nid', null=True)
    # 文章和分类,一个分类下有多篇文章,多以关联字段也是写在多的一方
    category = models.ForeignKey(to='Category', to_field='nid', null=True)
    # 文章和标签是多对多的关系,这篇文章属于哪个标签,这个需要手动创建第三章表, through就是通过那个表建立关系,through_fields通过那两个字段建立管理
    tag = models.ManyToManyField(to='Tag', through='ArticleTOTag', through_fields=('article', 'tag'))
    '''tag = models.ManyToManyField(to='tag) 这个是自动创建第三章表,如果我们需要自定义第三章表,则使用手动创建'''


    class ArticleTOTag(models.Model):
    '''这是手动创建的第三张表,表明多表的关联'''
    nid = models.AutoField(primary_key=True)
    # 文章的ID
    article = models.ForeignKey(to='Article', to_field='nid')
    #标签的id
    tag = models.ForeignKey(to='Tag', to_field='nid')


    class Commit(models.Model):
    '''用户评论表'''
    nid = models.AutoField(primary_key=Tag)
    # 谁
    user = models.ForeignKey(to='UserInfo', to_field='id')
    # 对那篇文章
    article = models.ForeignKey(to='Article', to_field='nid')
    # 评论的内容
    content = models.CharField(max_length=255)
    # 创建的时间
    create_time = models.DateTimeField(auto_now_add=True)
    '''这个是子评论,就是给哪个评论后面再评论,空位null,如果有评论主键评论的主键'''
    # 自关联,to自己的id,to_field就是主键,让一个字段可以关联本表的主键,就是自己关联自己
    parent = models.ForeignKey(to='self', to_field='nid', null=True, blank=True)


    class UpAndDown(models.Model):
    '''点赞点踩表'''
    nid = models.AutoField(primary_key=True)
    # 谁
    user = models.ForeignKey(to='UserInfo', to_field='id')
    # 给哪篇文章
    article = models.ForeignKey(to='Article', to_field='nid')
    # 点了赞或踩,这个BooleanField存的是布尔类型,在数据库表中是以0和1表示,因为数据库是不能存True和False的
    is_up = models.BooleanField()

    class Meta:
    #这个就是联合唯一,就是指定表中user字段只能和article字段关联
    unique_together = (('user', 'article'))
  • 相关阅读:
    破解百度云盘MAC下载限速问题
    win7 磁盘碎片整理
    python语言快捷注释
    PyCharm字体大小调整
    python pip安装requests库总提示:Fatal error in launcher...''
    请求过程中,需要证书认证,这种情况下如何处理
    python post接口测试第一个用例日记
    常用Linux命令
    接口测试意义及实现的方式
    TypeError: unbound method
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10599768.html
Copyright © 2011-2022 走看看