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学习系列之模型的主要内容,如果未能解决你的问题,请参考以下文章

4Python全栈之路系列之Django模型

5Python全栈之路系列之Django模型续

Django学习系列之模板系统

Django学习系列之django分页

Django学习系列之captcha 验证码插件

秒懂Django模型(数据库)关系(学习系列六)