文章目录

  • 关联关系
    • Many-to-one relationships
    • Many-to-many relationships¶
  • django学习——model中的get和filter方法的区别

模型
模型是您的数据唯一而且准确的信息来源。它包含您正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。

基础:

  • 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
  • 模型类的每个属性都相当于一个数据库的字段。
  • 综上诉说,Django 给你一个自动生成访问数据库的 API;请参阅 进行查询。

关联关系

Many-to-one relationships

定义一个多对一的关联关系,使用 django.db.models.ForeignKey 类。就和其他 Field 字段类型一样,只需要在你模型中添加一个值为该类的属性。

from django.db import models# Create your models here.
from django.db import models#多对一关系(如果一个 Car 模型 有一个制造者 Manufacturer --就是说一个 Manufacturer 制造许多辆车,但是每辆车都属于某个特定的制造者)
class Manufacturer(models.Model):pass#....
class Car(models.Model):manufacturer = models.ForeignKey(Manufacturer,on_delete=models.CASCADE)#...

Many-to-many relationships¶

定义一个多对多的关联关系,使用 django.db.models.ManyToManyField 类。就和其他 Field 字段类型一样,只需要在你模型中添加一个值为该类的属性。

如果你只是想要一个类似于记录披萨和配料之间混合和搭配的简单多对多关系,标准的 ManyToManyField 就足够你用了。然而,有的时候你可能会需要在两个模型的关系中记录更多的数据。

举例来讲,考虑一个需要跟踪音乐人属于哪个音乐组的应用程序。在人和他们所在的组之间有一个多对多关系,你可以使用 ManyToManyField 来代表这个关系。然而,你想要记录更多的信息在这样的所属关系当中,比如你想要记录某人是何时加入一个组的。

对于这些情况,Django允许你指定用于控制多对多关系的模型。你可以在中间模型当中添加而外的字段。在实例化 ManyToManyField 的时候使用 through 参数指定多对多关系使用哪个中间模型。对于我们举的音乐家的例子,代码如下:

from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=128)def __str__(self):return self.nameclass Group(models.Model):name = models.CharField(max_length=128)members = models.ManyToManyField(Person, through='Membership')def __str__(self):return self.nameclass Membership(models.Model):person = models.ForeignKey(Person, on_delete=models.CASCADE)group = models.ForeignKey(Group, on_delete=models.CASCADE)date_joined = models.DateField()invite_reason = models.CharField(max_length=64)

具体的参考:
官方文档:(https://docs.djangoproject.com/zh-hans/2.1/topics/db/models/#automatic-primary-key-fields)

django学习——model中的get和filter方法的区别

django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

django框架中的模型相关推荐

  1. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  2. ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解

    本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式.分享给大家供大家参考,具体如下: ajax(Asynchronous Javascript And Xml) 异步javasc ...

  3. mysql 中的neq_mysql中neq使用Python的Django框架中的压缩组件Django Compressor_MySQL

    为了加快网站的加载速度,我们通常要多js和css进行压缩处理.这些js和css的压缩工作如果都手动处理,费时费力. <mysql中neq使用Python的Django框架中的压缩组件Django ...

  4. 安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样

    前言 用过Django 进行开发的同学都知道,Django框架天然支持对CSRF攻击的防护,因为其内置了一个名为CsrfViewMiddleware的中间件,其基于Cookie方式的防护原理,相比基于 ...

  5. python日期选择框_Python的Django框架中设置日期和字段可选的方法

    设置字段可选 在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的. 举个例子,我们想要Author模块中的email字段成为可选,即 ...

  6. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  7. python manager_详解Python的Django框架中Manager方法的使用

    在语句Book.objects.all()中,objects是一个特殊的属性,需要通过它查询数据库. 在第5章,我们只是简要地说这是模块的manager .现在是时候深入了解managers是什么和如 ...

  8. Django框架中No installed app with label问题

    网上看见好多关于 No installed app with label的解决问题,感觉大部分都是复制粘贴过来的,什么注册INSTALLED_APPS中的子程序等问题,其实这个问题很简单,我们在迁移数 ...

  9. python include_tag_详解Python的Django框架中inclusion_tag的使用

    另外一类常用的模板标签是通过渲染 其他 模板显示数据的. 比如说,Django的后台管理界面,它使用了自定义的模板标签来显示新增/编辑表单页面下部的按钮. 那些按钮看起来总是一样的,但是链接却随着所编 ...

最新文章

  1. 2015年国际智慧教育展览会盛大开幕
  2. How program works
  3. 空列表不等同于None
  4. android中的常用方法,android开发中常用方法总结
  5. MultipartFile 支持什么类型_公测首发 | vika 维格表: 支持 API 的连接型智能表格/新一代团队数据协作神器...
  6. Linux的proc文件系统详解
  7. jmeter 计数器_JMeter函数
  8. python安装要什么配置_Python的安装和详细配置
  9. wpf和winform的那点区别
  10. 爬虫python能做什么-Python 爬虫学到什么样就可以找工作了?
  11. php 查询条件 session,PHP获取不到SESSION信息之一般情况解决方案
  12. php增删查改数据库,PHP数据库的增删改查
  13. 985硕士,入职八个月被通知裁员,领导哭着谈话,同事疯狂帮忙,但还是走了!...
  14. 实验四:图像空间域锐化
  15. 简单的水果价格排序(价格不重复)
  16. NAND Flash硬件原理
  17. GPU Counter功能更新|支持Adreno、PowerVR芯片
  18. 【OpenCV图像处理】十六、图像空域滤波(下)
  19. 拒绝忽悠——Python帮你来网购
  20. 用好【shareinstall】 App推广转化率提升80% so easy!

热门文章

  1. AD20学习笔记2---原理图绘制及编译检查
  2. java ora-12505_Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)
  3. mysql no listenter_为什么mysql中用\G表示按列方式显示
  4. java签到_实战:如果让你用SpringBoot实现签到奖励的功能,你会怎么做?
  5. java的日期操作_java中对时间的操作详解
  6. 1_Why DL work ?
  7. luogu P1774 最接近神的人_NOI导刊2010提高(02)
  8. 02ython基础知识(一)
  9. 使用最大似然法来求解线性模型(1)
  10. 无忧开通了博客园博客主页