- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个模型 Foo,它有一个简单的 M2M 字段来建模 Bar:
class Foo(Model):
bar = ManyToManyField(Bar)
Django 似乎创建了一个表 foo_bar ,它具有以下索引:
index 1: primary, unique (id)
index 2: unique (foo_id, bar_id)
index 3: non_unique (foo_id)
index 4: non_unique (bar_id)
根据我的 SQL 基础知识,如果查询需要查找 foo_id 上的条件,索引 2 就足够了(因为最左边的列可用于查找)。索引 3 似乎是多余的。
我的假设是否正确,索引 3 确实占用了索引空间,但没有提供任何好处?我最好使用直通表并在 (foo_id, bar_id) 上手动创建唯一索引,并且可以选择在 (bar_id) 上创建另一个索引(如果需要)?
最佳答案
理解多对多关联在数据库中如何表示的关键是要认识到联结表(在本例中为 foo_bar)的每一行将左表 (foo) 中的一行与一行连接起来从右表(栏)。 “foo”的每个pk可以多次复制到“foo_bar”; “bar”的每个 pk 也可以多次复制到“foo_bar”。但“foo_bar”中的同一对 fk 只能出现一次。
因此,如果“foo_bar”中只有一个索引(“foo”或“bar”的 pk),则它只能出现一次......并且它不是多对多关系。
例如,我们有两个模型(电子商务):产品、订单。
每种产品可以有多个订单,一个订单可以包含多个产品。
class Product(models.Model):
...
class Order(models.Model):
products = ManyToManyField(Product, through='OrderedProduct')
class OrderedProduct(models.Model):
# each pair can be only one time, so in one order you can calculate price for each product (considering ordered amount of it).
# and at the same time you can get somewhere in your template|view all orders which contain same product
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
amount = models.PositiveSmallIntegerField() # amount of ordered products
price = models.IntegerField() # just int in this simple example
def save(self, *args, **kwargs):
self.price = self.product__price * self.amount
super(OrderedProduct, self).save(*args, **kwargs)
关于python - Django ManyToManyField 是否创建具有冗余索引的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095950/
我有一个模型,我想在其中为 manytomanyfield 的计数创建排名。只有它需要一个整数字段而不是一个 manytomany 字段。我的投票有问题__lt。 最好的做法是创建一个计算选票的 vo
假设我有两个 Django 应用程序: competitions - 将处理比赛数据 entries - 将处理与让参赛者参加比赛相关的功能 在比赛应用程序中,我有一个代表比赛部分的模型: class
在我的项目中,我有 2 个模型,它们具有相互指向的 ManyToMany 字段。在这种情况下,我有选举和候选人。这个想法是一个选举可以有多个候选人,一个候选人也可以是多个选举的一部分(一个“候选人”只
我正在使用 Django 的 ManyToManyField,当我尝试向其中添加数据时,出现以下错误: Traceback (most recent call last): File "", li
在 django 模型中我需要过滤 ManyToManyField有条件的 STATUS_CHOICES=( ('ACTIVE', 'Active'), ('INACTIVE', 'Inact
我读了documentation about many-to-many relationships和 examples .我找不到关于在何处放置 ManyToManyField 的提示。就我而言,我有
我需要创建一个有一些选项的 manytomany 字段,然后在每个选项旁边有一个额外的字段 我的模型: class Subject(models.Model): name = models.C
我有两个模型,产品和类别以及产品中的多对多字段。 类别在 ProductCreate View 中显示为键。 我需要为类别自定义小部件和字段。 我检查了 Django 源字段和小部件,但没有看到 Ma
我正在尝试在 Django 中使用 ModelForms 将内容添加到我的数据库中,其中包括一个 ManyToManyField。这是我的模型的相关部分: class Category(models.
我想在创建实例时更新字段,我尝试过 signals但对 ManyToManyField 来说似乎很复杂 class MobileCustomer(models.Model): customer
我正在尝试创建一个表示图形节点的模型。 class Node(models.model): ins = models.ManyToManyField("self", null=True, bl
我正在尝试创建一个表示图形节点的模型。 class Node(models.model): ins = models.ManyToManyField("self", null=True, bl
我有带有 M2M 字段的用户配置文件模型 class Account(models.Model): ... friends = models.ManyToManyField('self
我知道我不可能是第一个问这个问题的人,但我找不到答案,所以请不要吃掉我。 如果我有一个模型,其字段是ManyToManyField;我知道我可以在保存之前获取所选对象,但如果所选对象已更改,则这没有帮
我有一个遗留数据库,其中包含文档和作者的表格。第三个表定义了文档和作者之间的有序多对多关系,使用文档和作者的外键以及一个整数来指定给定文档的作者顺序。 使用 Django 1.1.1(或 SVN),有
我有一个这样的结构: 1. 作者 2. 预订 3.作者类型 4. 作者图书类型 一本书可以有多个作者,并且它可以在书中具有以下功能,例如:“作者”,“共同作者”,“部分”,“帮助者”等: class
以下是我的例子: models.py: class Example(models.Model): title = models.CharField(...) description =
Django ManyToManyField 在 HTML 中呈现如下内容: Question 1, Answer 1 Question 1, Answer 2 Que
如标题所述,manytomanyfield 和 through 如何出现在管理站点中? class SchoolClass(models.Model): id = models.AutoFie
我的 Django 项目中有这些模型: class Area(models.Model): name = models.CharField(max_length=100, primary_ke
我是一名优秀的程序员,十分优秀!