首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django之contenttypes的应用

Django contenttypes 应用 简介 contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。...这里提供一个场景,网上商城购物时,会有各种各样的优惠券,比如通用优惠券,满减券,或者是仅限特定品类的优惠券。...在数据库中,可以通过外键将优惠券和不同品类的商品表关联起来: from django.db import models class Electrics(models.Model): """...(to='Clothes', null=True) 如果是通用优惠券,那么所有的ForeignKey为null,如果仅限某些商品,那么对应商品ForeignKey记录该商品的id,不相关的记录为null...为了更方便查询商品的优惠券,我们还可以在商品类中通过GenericRelation字段定义反向关系。

79510

Django之model查select的用法

Q对象可以对关键字参数进行封装,从而更好的应用多个查询,可以组合&(and)、|(or)、~(not)操作符。...反向查询: # 查询角色下包含的所有用户 _t = Role.objects.get(name='Role03') _t.user_set.all() 另一种反向查询的方法: _t = Role.objects.get...(name='Role03') # 这种方法比上一种_set的方法查询速度要快 User.objects.filter(role=_t) 第三种反向查询的方法: 如果外键字段有related_name..._t = Group.objects.get(name = 'groupC') _t.groupUsers.all() get_object_or_404 正常如果我们要去数据库里搜索某一条数据时,通常使用下边的方法...) # get_object_or_404方法,它会先调用django的get方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http

75940
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django---ORM操作大全

    前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...,如果数据库迁移,只需要更换Django的数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据的字符编码) 由于Django自带的orm是data_first类型的ORM,...:小写表名__关联表字段 通过对象的形式反向跨表:小写表名_set().all() 应用场景: 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择) 例如:创建用户信息时候,需要选择一个用户类型...一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了 例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据 1、... Q()可以使orm的fifter()方法支持, 多个查询条件,使用逻辑关系(&、|、~)包含、组合到一起进行多条件查询; 语法: fifter(Q(查询条件1)| Q(查询条件2)) fifter(

    7K100

    Django之Model操作数据库详解

    Django ORM框架的功能: 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 根据设计的模型类生成数据库中的表格。 通过方便的配置就可以进行数据库的切换。...二、 数据库的配置 Django可以配置使用sqlite3,mysql,oracle,postgresql等数据库。...'PORT':'3306', #数据库使用的端口 } } 配置好数据库的信息后还必须安装数据库的驱动程序,Django默认导入的mysql的驱动程序是MySQLdb,然而MySQLdb...Q Q对象可以对关键字参数进行封装,从而更好的应用多个查询 #查询table2表中以"aaa"开头的所有的title列 q1=table2.objects.filter(Q(title__startswith...__gt=4 九、实例 1、Django的ORM中如何判断查询结果是否为空,判断django中的orm为空 result= Booking.objects.filter() 方法一 .exists()

    7.1K10

    06.Django基础五之django模型层(二)多表操作

    元信息 ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。...ordering = ['pub_date',] 只有设置了该属性,我们查询到的结果才可以被reverse(),否则是能对排序了的结果进行反转(order_by()方法排序过的数据)   获取元信息...但是我们就不能使用ORM外键相关的方法了,所以我们单纯的将外键换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM外键方法的。...#db_constraint=False只加两者的关系,没有强制约束的效果,并且ORM外键相关的接口(方法)还能使用,所以如果将来公司让你建立外键,并且不能有强制的约束关系,那么就可以将这个参数改为False...在这些情况下,我们可以直接访问数据库,完全避开模型层。     我们可以直接从django提供的接口中获取数据库连接,然后像使用pymysql模块一样操作数据库。

    2.7K20

    Django model select的各种用法详解

    Q对象可以对关键字参数进行封装,从而更好的应用多个查询,可以组合&(and)、|(or)、~(not)操作符。...反向查询: # 查询角色下包含的所有用户 _t = Role.objects.get(name='Role03') _t.user_set.all() 另一种反向查询的方法: _t = Role.objects.get...(name='Role03') # 这种方法比上一种_set的方法查询速度要快 User.objects.filter(role=_t) 第三种反向查询的方法: 如果外键字段有related_name..._t = Group.objects.get(name = 'groupC') _t.groupUsers.all() get_object_or_404 正常如果我们要去数据库里搜索某一条数据时,通常使用下边的方法..._404方法,它会先调用django的get方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http import Http404 try

    1.1K30

    Django学习笔记之ORM多表操作

    注意事项:  表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的  对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名... 这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据settings 中指定的数据库类型来使用相应的SQL 语句。  ...() #与egon作者相关的所有书籍 for book_obj in book_list: print(book_obj.title) 注意: 你可以通过在 ForeignKey...from django.db.models import Q Q(title__startswith='Py') Q 对象可以使用& 和| 操作符组合起来。...同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询: bookList=Book.objects.filter(Q(authors__name="yuan") & ~Q(publishDate

    2.8K40

    Django学习笔记之Models与ORM操作

    : #一对多(ForeignKey): #方式一: 由于绑定一对多的字段,比如publish,存到数据库中的字段名叫publish_id,所以我们可以直接给这个 # 字段设定对应值:...反向查找(条件)----在没有外键的表中,查找与其关联表的字段信息 #反向查找之一对多: ret8=models.Publisher.objects.filter(book__title...)可以对关键字参数进行封装,从而更好地应用多个查询 q1=models.Book.objects.filter(Q(title__startswith='P')).all() print...(q1)#[, ] # 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。...Q(title__startswith='P') | Q(title__startswith='J') # 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合 Q

    1.2K60

    Django中ORM操作

    前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django...,如果数据库迁移,只需要更换Django的数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据的字符编码) 由于Django自带的orm是data_first类型的ORM,...中的orm的时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。...正向查找:ForeignKey在 UserInfo表中,如果从UserInfo表开始向其他的表进行查询,这个就是正向操作,反之如果从UserType表去查询其他的表这个就是反向操作。

    4.8K10

    Django小技巧22: 设计一个好的模型

    Python Company.companies.filter(name='Google') 这样看起来代码就很有可读性了 Model 定义顺序 Django Coding Style 建议内部类,方法和属性的顺序为...related_name ForeignKey 的 related_name 可以为反向关系定义一个有意义的名称 经验法则: 如果你不确定related_name是什么, 请使用包含所定义ForeignKey...Blank 和 Null 我在另一篇文章有讲过两者的区别 Blank or Null,在这里我会总结一下. null: 数据库相关; 定义数据库字段的值是否接受空值。...在数据库级别上, 该字段可以为 NULL, 但在应用程序级别上, 它是必填字段(前提你通过 Django 标准的 Form 进行判断)。...这里是 Django 支持的所有字段类型. 如果你对代码风格规范感兴趣, 可以读一读Django Coding Style. 当然也可以看一看Flake8.

    89920

    django select_related和prefetch_related的用法与区别

    INTERNAL_IPS = [ # … ‘127.0.0.1’, # … ] 当你安装好debug_toolbar后,启动django服务器,打开任何一个页面你都可以看到查询数据库所花时间以及是否有相似及重复的查询...for循环每运行一次,django都要对数据库进行一次查询,造成了极大的资源浪费。为什么我们不能再第一次获取文章列表的同时就获取每篇文章相关联的category和tags对象信息呢?...Django考虑到了这一点,所以提供select_related和prefetch_related方法来提升数据库查询效率,类似于SQL的JOIN方法。...Django提供了prefect_related方法来解决这个问题。prefect_related可用于多对多关系字段,也可用于反向外键关系(related_name)。...对与单对单或单对多外键ForeignKey字段,使用select_related方法 对于多对多字段和反向外键关系,使用prefetch_related方法 两种方法均支持双下划线指定需要查询的关联对象的字段名

    1.4K20

    Django-models & QuerySet API

    django中配置mysql数据库 查询queryset时如果需要选取查询集中的某个子集的字段时, 应该用切片,或者first 选择某个子集对象,这样才能够使用到 子集的字段,直接queryset后选择字段会直接报错...一是在INSTALLED_APPS里面加入app名称; 二是配置数据库相关信息 View Code 定义数据库表结构  models.py 使用orm框架,不需要编写原生的sql语句 from django.db...,如果为false,admin上面不可修改且不显示,但是数据库可以改 error_messages   自定义错误信息,是字典类型 help_text   该字段的提示信息 unique    值唯一...# python manage.py makemigrations #  python manage.py migrate QeurySet API 数据库接口相关的接口叫queryset api。...school和teacher表里并没有写,但是他们可以通过反向关联,查找到对应的student: >>> School.objects.get(school_name='北大').student_set

    1.4K20

    Python进阶29-ORM介绍

    当我们需要对数据库进行操作时,势必需要通过连接数据、调用sql语句、执行sql语句等操作,ORM将数据库中的表,字段,行与我们面向对象编程的类及其方法,属性等一一对应,即将该部分操作封装起来,程序猿不需懂得...2.和Django紧密集合,用Django时使用约定俗成的方法去操作数据库 ##缺点: 1.不好处理复杂的查询,强制开发者回到原生SQL 2.紧密和Django集成,使得在Django环境外很难使用...- 一对一双下划线查询 - 正向:按字段,跨表可以在filter,也可以在values中 - 反向:按表名小写,跨表可以在filter,...ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。...元信息 ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。

    4.5K10

    Django之QuerySet详解

    可以通过ManyToManyField、ForeignKey 和 OneToOneFiel 属性反向引用关联的模型的字段: >>> Blog.objects.values('name', 'entry_...还可以使用正常连接语法来执行相关字段的相关字段。...当最初获取数据时不知道是否需要这些特定字段的情况下,如果正在使用查询集的结果,可以告诉Django不要从数据库中检索它们。...对于返回大量只需要访问一次的对象的QuerySet,这可以带来更好的性能,显著减少内存使用。 请注意,在已经提交了的iterator()上使用QuerySet会强制它再次提交数据库操作,进行重复查询。...仍然可以根据相关字段进行过滤: >>> Entry.objects.filter(blog__id=1).update(comments_on=True) update()方法返回受影响的行数: >>>

    2.4K20

    Django之ORM对数据库操作

    ,istartswith, endswith, iendswith  date字段还可以: models.Class.objects.filter(first_day__year=2017) ForeignKey...它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...示例1: 查询作者名是小仙女或小魔女的 models.Book.objects.filter(Q(authors__name="小仙女")|Q(authors__name="小魔女")) 你可以组合& ...同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询。 示例:查询作者名字是小仙女并且不是2018年出版的书的书名。

    1.3K110
    领券