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

Web | Django 与数据库交互,你需要知道的 9 个技巧

与其他非阻塞应用程序服务器(如 Tornado,asyncio 甚至 Node)不同,Django 通常使用同步工作进程。...事务操作通常会涉及用户和产品的一些属性,所以我们经常使用 select_related 来强制 join 并保存一些查询。 更新交易还会涉及获得一个锁来确保它不被别人获得。 现在,你看到问题了吗?...根据我们用这个模型的职能,我们可以设置db_index=False忽略 FK 索引,只保留唯一约束索引: class Membership(Model): group = ForeignKey(...我们看看官网文档怎么说的: BRIN 设计用于处理非常大的表格,其中某些列与表格内的物理位置有一些自然的相关性。 要理解这个陈述,了解 BRIN 索引如何工作是很重要的。...回到文档: ...列与表格内的物理位置有一些自然的相关性 这是 BRIN 索引的关键。为了充分利用它,列中的值必须大致排序或聚集在磁盘上。

2.9K40

Django admin管理工具的使用、定制及源码解析

如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下...因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。...我们如何修改这个app的名称达到定制的要求呢,其实Django已经在文档里进行了说明。 从Django1.7以后不再使用app_label,修改app相关需要使用AppConfig。...,使之显示过滤后的数据 下面的代码表示,car字段会根据当前登录的用户显示此用户所拥有的车 1 2 3 4 5 class MyModelAdmin(admin.ModelAdmin.../ 默认的django会自动根据我们定义的模型生成form给admin使用,使用到这个form的地方分别是change和add的时候。

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

    Sentry 开发者贡献指南 - 数据库迁移

    目录 命令 将您的数据库升级到最新 将您的数据库移动到特定的迁移 为迁移生成 SQL 生成迁移 将迁移合并到 master 指南 过滤器 索引 删除列/表 列 表 外键 重命名表 添加列 向列添加 NOT...NULL 添加具有默认值的列 改变列类型 重命名列 Django 迁移是我们处理 Sentry 中数据库更改的方式。...过滤器 如果(数据)迁移涉及大表或未索引的列,最好迭代整个表而不是使用 filter。...相反,更好的选择是: 在 Postgres 中添加没有默认值的列,但在 Django 中添加默认值。这使我们能够确保所有新行都具有默认值。...对于任何其他类型,最好的前进路径通常是: 创建具有新类型的列。 开始对新旧列进行双重写入。 回填并将旧列值转换为新列。 更改代码以使用新字段。 停止写入旧列并从代码中删除引用。 从数据库中删除旧列。

    3.6K20

    从0开始做系统

    前面已经写了如何做接口,那是方便调用的。现在写个如何做后台系统,是方便操作的。 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。...后台管理可以在各个app的admin.py文件中进行控制。 假如有个小白,想做个后台系统,如何做,他可以直接用Django的admin来弄。...必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。...如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话...,详细页面时,使用radio显示选项(FK默认使用select) form = ModelForm,用于定制用户请求时候表单验证 可以参考: django admin高级扩展 简单的定制了一下: from

    1.4K30

    django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

    例如,我们可以查询所有出版商,并注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 的外键反转关系): >>> from django.db.models import...在第二个查询中,过滤器在注解之前,所以,在计算注解值时,过滤器就限制了参与运算的对象的范围。 order_by() 注解可以用来做为排序项。...但是,如果使用了values()子句,它就会限制结果中列的范围,对注解赋值的方法就会完全不同。...不是在原始的 QuerySet返回结果中对每个对象中添加注解,而是根据定义在values() 子句中的字段组合对先结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的...注意 你可能想知道为什么 Django 不删除与你无关的列。主要原因就是要保证使用 distinct()和其他方法的一致性。

    1.7K30

    Django 3.1 官网学习路线

    您将在 Python 代码中使用此值,数据库将使用它作为列名。 可以对字段使用可选的第一个位置参数来指定我们可读的名称。它在 Django 的几个内省部分中使用,同时也用作文档。...` FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`); 请注意以下几点: 确切的输出将根据所使用的数据库而有所不同。...不同的模型字段类型(DateTimeField、CharField)对应于适当的 HTML 输入小部件。每种类型的字段都知道如何在 Django 管理中显示自己。...如果“Date published”的值与教程 1 中创建问题时的时间不匹配,这可能意味着您忘记为 TIME_ZONE 设置正确的值。更改它,重新加载页面并检查正确的值出现。...更改列表分页、搜索框、过滤器、日期层次结构和列标题排序都像您认为的那样协同工作。

    8.2K10

    Admin组件

    本篇文章通过 对admin源码简单分析admin内部原理 ,扩展使用方式,为以后进行定制和自己开发组件做铺垫。 Admin的使用 Django 提供了基于 web 的管理工具。...,如 1. list_display,列表时,定制显示的列。...如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下...事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。...因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。

    1.6K30

    【Django】聚合在Django的详细解析以及运用在企业级项目里的方法

    聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象的方法。然而,有时需要根据一组对象聚合您想要获得的值。...本主题指南介绍如何使用Django查询生成和返回聚合值。...使用后,它将返回一个“name value”字典,其中“name”是聚合值的标志,“value”是计算的聚合结果。名称是根据字段名称和聚合函数自动生成的。...应用于公共模型字段的任何过滤器()(或exclude())都将具有约束被认为是聚合的对象的效果。 当使用annotate()子句时,过滤器具有约束注释对象计算的效果。...很难直观地理解ORM如何将复杂的查询集转换为SQL查询。因此,如果有疑问,请使用str(queryset.query)`检查SQL并编写大量测试。

    2K40

    django后台管理-admin

    ) 注册方式二该方法是Django1.7的版本新增的功能: from django.contrib import admin from blog.models import Blog #Blog模型的管理器...可以在settings.py中设置: LANGUAGE_CODE = 'zh-CN' TIME_ZONE = 'Asia/Shanghai' 1.8版本之后的language code设置不同: LANGUAGE_CODE...设置显示外键字段 fk_fields = ('machine_room_id',) 2、筛选器 from django.contrib import admin from blog.models...一般ManyToManyField多对多字段用过滤器;标题等文本字段用搜索框;日期时间用分层筛选。 过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。...: admin_site = MyAdminSite(name='management') 此处括号内name值必须设置,否则将无法使用admin设置权限,至于设置什么值,经本人测试,没有影响。

    88710

    后端框架学习-Django

    参数=值&参数=值 信息片段:#subject锚点,直接定位到网页指定位置 Django如何处理URL?...此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器。...过滤器:在变量输出时对变量的值进行处理 可以通过使用过滤器来改变变量的输出显示 语法: {{变量|过滤器1:'参数1'|过滤器2:'参数值2'…}} 常用过滤器: lower:转换为小写 upper:...缺点: 对于复杂业务,使用成本较高 根据对象的操作转换为SQL语句,根据查询结果转化为对象,在映射过程中有性能损失。...创建数据 方案1: MyModel.objects.create(属性1=值1,属性2=值2,…) 成功:返回创建好的实体对象 失败:抛出异常 方案2: 创建MyModel实例对象,并调用save()并保存

    9.6K40

    Django之Model操作数据库详解

    Django ORM框架的功能: 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 根据设计的模型类生成数据库中的表格。 通过方便的配置就可以进行数据库的切换。...null(前提FK字段需要设置为可空) - models.SET_DEFAULT,删除关联数据,与之关联的值设置为默认值(...filter返回的是一个QuerySet对象,filter里可以设定多个过滤条件 4、查 查询数据使用QuerySet API。...Q查询 F查询专门取对象中某列值的操作,F的作用:用来批量修改数据的 #导入F from django.db.models import F #把table1表中的num列中的每一个值在的基础上加10...__gt=4 九、实例 1、Django的ORM中如何判断查询结果是否为空,判断django中的orm为空 result= Booking.objects.filter() 方法一 .exists()

    7.1K10

    Django—模型

    表booktest_heroinfo结构如下:   Django框架会根据关系属性生成一个关系字段,并创建外键约束。 ?...根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表创建自动增长的主键列,每个模型只能有一个主键列...,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...上去 3.字段查询 实现sql中where的功能,调用过滤器filter()、exclude()、get(),下面以filter()为例。 通过"属性名_id"表示外键对应对象的id值。...返回单个值的过滤器如下: get():返回单个满足条件的对象 如果未找到会引发"模型类.DoesNotExist"异常。

    6.1K21

    Django3.2边学边记—Adimn站点管理

    ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式 上文中展示了TestAdmin类的一种注册方法,还有一种方法,就是使用装饰器注册,...控制显示的列,Django 会尝试按照这个顺序解释 list_display 的每个元素: 一个模型的字段。 一个可调用对象。 一个代表 ModelAdmin 属性的字符串。...atitle.short_description='标题'   如果是更改模型字段显示的列标题,可以在定义模型字段时,设置verbose_name的值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性...用 list_filter 来激活管理更改列表页面右侧侧栏的过滤器,如下截图所示: list_filter 应是一个元素的列表或元组,会将对应字段的值列出来,一般用于快速过滤有重复值的字段 12...,并返回所有包含这些词的对象,不区分大小写(即 icontains 查找:不区分大小写的包含匹配),其中每个词必须在 search_fields 中至少有一个。

    1.2K00
    领券