(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 = ...
随机推荐
- Latex: 参考文献双栏对齐
参考: How to level columns in bibliography? Latex: 参考文献双栏对齐 需要实现的效果: 方法1: 在开头引用balance: \usepackage{ba ...
- SAP SD-销售模式-寄售(客户寄售)
SAP SD-销售模式-寄售(客户寄售) http://blog.sina.com.cn/s/blog_a440b7ee01014kgq.html http://www.doc88.com/p-23 ...
- 解决依赖冲突:maven-enforcer-plugin插件
我们会经常碰到这样的问题,在pom中引入了一个jar,里面默认依赖了其他的jar包.jar包一多的时候,我们很难确认哪些jar是我们需要的,哪些jar是冲突的.此时会出现很多莫名其妙的问题,什么类找不 ...
- 20175317 《Java程序设计》第四周学习总结
20175317 <Java程序设计>第四周学习总结 教材学习内容总结 第四周我学习了教材第五章的内容,了解了子类与继承的知识,学到了以下内容: 明白了什么是子类与父类.类的树形结构. 子 ...
- jps: command not found
在/etc/profile中添加javahome的 path export JAVA_HOME=/usr/java/jdk1.8.0_131export PATH=$PATH:$JAVA_HOME/b ...
- Django框架(二)
四.Django简介 1.MVC与MTV模型 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方 ...
- 获取GitHub上远程分支内容
一.clone项目 二.获取远程特定分支的内容 1.查看所有分支 git branch --all # 默认有了ls和master分支,所以会看到如下三个分支 # master[本地主分支] orig ...
- rest_framework 之视图
1. 继承ModelSerilizer,直接指定要序列化的表模型 MySerializers.py from app import models # 继承ModelSerilizer,直接指定要序列化 ...
- gcc4.9.1新特性
C family Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=a ...
- Andriod Studio两种签名机制V1和V2的区别
Android Studio 2.2以上版本打包apk的时候,我们会发现多了个签名版本(v1.v2)选择,如下图红色方框所示 问题描述(v1和v2) Android 7.0中引入了APK Signat ...