首页 > 代码库 > Django学习系列之模型

Django学习系列之模型

技术分享

Django ORM简介

介绍

关系对象映射(Object Relational Mapping)

Django中遵循Code first的原则,即根据代码中定义的类生成数据库

ORM中:

  • 我们写的类表示数据库的表名
  • 根据这个类创建的对象是表结构 

Django ORM

一对多关系例子

定义urls.py

from django.conf.urls import urlfrom django.contrib import admin #导入django adminadmin.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.nameclass 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 makemigrationsF:\PyCharm\dj>python3 manage.py migrate

定义admin.py

from django.contrib import adminfrom 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学习系列之模型