(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'))
(33)关于django中路由自带的admin + 建表关系的讲解的更多相关文章
- django中路由配置的正则
在django中配置路由遇到正则的坑: django2.x版本中使用re_path来进行正则表达式的匹配 用法如下: from Django.urls import re.path(导入re_path ...
- django中使用ORM模型修改数据库的表名
在django中,使用models.py创建好一张表后,如果不指定表的名字,那么表的名字就默认为 model_modelname 例如: class Book(models.Model): id = ...
- 64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- Python Django orm操作数据库笔记之外键和表关系
外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...
- Django框架基础知识07-常用查询及表关系的实现
1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...
- django中路由系统和视图的对应关系(值的传递)-->主要内容(位置参数、关键字参数、额外参数、include分组[urls的分发]、命名分组、反向解析、APPEND_SLASH)
路由系统也就是 urls.py文件,视图就是 views.py文件 路由系统里面要注意的事项 urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续. 若要从UR ...
- 关于Django中路由层(URL-conf)
关于路由层 路由层其实就是项目中urls.py那个文件,那里面存放着url和视图函数的对应关系它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...
- Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系
首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py # the settings above # STATIC SETTINGS STATIC_URL = ...
随机推荐
- Docker常用命令详解
docker ps 查看当前正在运行的容器 docker ps -a 查看所有容器的状态 docker start/stop id/name 启动/停止某个容器 docker attach id 进入 ...
- Static需谨慎
Static Cling Sticking Your Code To Things Unnecessarily Static Cling is a code smell used to describ ...
- Lintcode423-Valid Parentheses-Easy
思路: 数据结构:stack.遍历整个字符串,如果遇到左向括号( [ { 则入栈.如果遇到右向括号时,先检查栈是否为空,为空说明左右向括号数目不一致,返回false:不为空则弹出栈顶元素查看是否和右向 ...
- vue的技巧代码
转载:https://segmentfault.com/a/1190000014085613 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList ...
- MDK C++编程说明
1.汇编启动文件的[WEAK]声明仅对C文件符号有效,所以我们编写外设中断服务方法时应该写在C文件中,或者在CPP文件中使用exetrn "C" { }修饰符. 2.C编译器不能直 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建页脚摘要
jQuery EasyUI 数据网格 - 创建页脚摘要 在本教程中,我们将向您展示如何在数据网格(datagrid)页脚显示摘要信息行. 为了显示页脚行,您应该设置 showFooter 属性为 tr ...
- python中得公有和私有——私有函数和公开函数_补充完整
包括实例属性.类属性,私有成员和公有成员,公有方法.私有方法和静态方法. 类似_xxx和__xxx这样的函数或变量就是非公开的,不应该被直接引用.如下: # python私有函数 def _abc_1 ...
- httpd常见配置
httpd常见配置 配置文件 /etc/httpd/conf/httpd.conf 主配置文件 /etc/httpd/conf.d/*.conf 辅助配置文件 配置文件语法检查及重新加载配置文 ...
- pc远程控制凭证不工作的解决办法
感谢这位博主写的文章https://blog.csdn.net/u010433704/article/details/50679874 前提是要控制的电脑设置了密码,之前想不明白为什么需要这一项,后来 ...
- Qt 布局管理
在布局编辑环境里: sizePolicy 影响控件在布局上的大小. layout 的属性 如:如margin 设置控件在布局上边距. 有时候需要设置 下面是一个 代码布局的方式 #include &q ...