Django model 中设置联合约束和联合索引的方法
作者:ding_312 发布时间:2023-09-24 09:14:15
标签:Django,model,联合,约束,索引
在Django model中对一张表的几个字段进行联合约束和联合索引,例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录。
举个栗子:
Django model中购物车表
class Cart(models.Model):
user = models.ForeignKey(
MyUser,
verbose_name="用户"
)
goods = models.ForeignKey(
Goods,
verbose_name="商品"
)
num = models.IntegerField(
verbose_name="商品数量"
)
is_select = models.BooleanField(
default=True,
verbose_name="选中状态"
)
class Meta:
# 联合约束 其中goods和user不能重复
unique_together = ["goods", "user"]
# 联合索引
index_together = ["user", "goods"]
unique_together = ["goods", "user"] 表示联合约束,其中"goods"和"user"表示不能重复,不能一样。
index_together = ["user", "goods"] 表示联合索引,其中"goods"和"user"联合同步查询,提高效率。
联合索引的优势
示例SQL:select * from person where a=100 and b=100 and c=1000;
假设你的数据有一千万条 每次条件过滤 省10%的数据
1 如果三个单索引 先拿a的索引找 剩下100万数据 然后拿b条件找 剩十万 再c条件找 最后得到一万数据
2 如果是联合索引 他 一千万数据*10% * 10% * 10% 直接得到一万条数据
建立联合索引的同时 还会给他们之间的组合建立索引
来源:https://blog.csdn.net/ding_312/article/details/81264910


猜你喜欢
- 作用:主要记录信息,便于定位查看问题。python logging模块官网:https://docs.python.org/zh-cn/3.
- 只要为pycharm配置anaconda中的解析器即可。操作步骤:1. 在pycharm菜单栏中,点击File-Settings-Proje
- 本文实例讲述了python获取指定目录下所有文件名列表的方法。分享给大家供大家参考。具体实现方法如下:这里python代码实现获取文件名列表
- 前言JSON是一种轻量级的数据交换格式。易于阅读和编写。 golang 提供了 encoding/json 包来操作JSON数据。1. 结构
- 二维数组二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列
- 查看python3.4.1文档,发现对于decimal模块的讲解非常多,由此可见其功能也很强大(下面算是把我认为比较重要的半翻译半学习吧~)
- 本文实例为大家分享了python实现微信消息防撤回的具体代码,供大家参考,具体内容如下使用了sqlite3保存数据,当有人撤回消息时取出数据
- 在编写一些小程序时,我需要比较两个字符串是否相同。一开始的思路是使用ord()函数获取字符的整数表示,但是调试过后发现,ord()函数传入的
- 本文实例讲述了python的keyword模块用法。分享给大家供大家参考。具体如下:Help on module keyword:NAME
- QueueTornado的tornado.queue模块为基于协程的应用程序实现了一个异步生产者/消费者模式的队列。这与python标准库为
- DataList Web 服务器控件 通过使用模板显示数据源中的项。通过操作组成 DataList
- 使用场景当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到gi
- 本文实例讲述了Python实现给文件添加内容及得到文件信息的方法。分享给大家供大家参考。具体分析如下:经常会遇到给文件添加内容的时候,如果只
- 这个小程序可以自己设定行数和列数进行图片切割import osfrom PIL import Imagedef splitimage(src
- 字符串转list数组str = '1,2,3'arr = str.split(',')gpu_ids分配na
- 原来看到这个代码的时候,觉得功能不错,调试并整理了一下也许大家用的到,对于越来越注重用户体验的今天,这种功能一定很受欢迎,当然本例子只是一个
- Application对象 Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保
- python提供了4种方式来满足进程间的数据通信1. 使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建
- 1、设置无头浏览器模式from selenium import webdriverfrom selenium.webdriver.chrom
- 1. 模板编译Vue的模板编译就是将模板字符串转换为渲染函数的过程。具体来说,当组件的生命周期执行到created和beforeMounte