Django学习系列之模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习系列之模型相关的知识,希望对你有一定的参考价值。
Django ORM简介
介绍
关系对象映射(Object Relational Mapping)
Django中遵循Code first的原则,即根据代码中定义的类生成数据库
ORM中:
- 我们写的类表示数据库的表名
- 根据这个类创建的对象是表结构
Django ORM
一对多关系例子
定义urls.py
from django.conf.urls import url from django.contrib import admin #导入django admin admin.autodiscover() urlpatterns = [ url(r‘^admin/‘, admin.site.urls), #django admin 访问路径 ]
定义models.py
from django.db import models # Create your models here. class userType(models.Model): #选择用户类型表 name = models.CharField(max_length=32) def __str__(self): #让获取到的数据显示为字符串(选择用户类型的时候显示的不是字符串格式(举例:普通用户or超级用户),而是object XXXX) return self.name class userInfo(models.Model): #创建用户表 nid = models.AutoField(primary_key=True) #如果不手动写django会自动创建这个自增列 name = models.CharField(max_length=30) #列 名 email = models.EmailField(max_length=30) #列 名 memo = models.TextField() #列 名 user_type = models.ForeignKey(userType,null=True,blank=True) #外键是userType表,详情请看创建用户是选择数据类型 #blank表示在Web界面上的user_type这个选项可以为空
创建数据库
F:\\PyCharm\\dj>python3 manage.py makemigrations
F:\\PyCharm\\dj>python3 manage.py migrate
定义admin.py
from django.contrib import admin from hello import models #导入app里的models # Register your models here. admin.site.register(models.userInfo) #对应models里的userinfo表 admin.site.register(models.userType) #对应models里的usertype表
Web访问
注意:图中标记的地方为models里创建的两个表
创建UserType
创建用户
多对多关系例子
from django.db import models # Create your models here. #########这是第一种方式让两个表关联起来,这种方式的好处就是操作表的时候可以直接操作 class B2G(models.Model): boy = models.ForeignKey(‘Boy‘) girl = models.ForeignKey(‘Girl‘) # 假如这个表里有张三、李四、王五,三个人 class Person(models.Model): name = models.CharField(max_length=32) # 假如这个表里有吃饭、打球、游泳三个爱好 class aihao(models.Model): name = models.CharField(max_length=32) # 现在要实现一个功能,一个人可以选择多个爱好,一个爱好可以被多个人选择 ################这是第二种方式让两个表关联起来,这种方法需要通过间接的方式操作数据库 f = models.ManyToManyField(Person)
一对一关系例子
# 这个表里有 普通用户、超级用户两个用户类型 class userType(models.Model): name = models.CharField(max_length=32) def __str__(self): return self.name # 这个表里有张三、李四两个用户 class userInfo(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=30) email = models.EmailField(max_length=30) memo = models.TextField() user_type = models.OneToOneField(userType,null=True,blank=True) # 现在要实现: # 如果张三选普通用户之后,李四就不能选择普通用户 # 如果李四选超级用户之后,张三就不能选择超级用户
以上是关于Django学习系列之模型的主要内容,如果未能解决你的问题,请参考以下文章