gpt4 book ai didi

django - 查询速度反转 OneToOneField

转载 作者:行者123 更新时间:2023-11-29 13:54:56 25 4
gpt4 key购买 nike

我对将文章分配给杂志的两种建模方法存有疑问。模型的一些伪代码可能是:

class Article():
title = ...
text = ...
magazine = ForeignKey(Magazine, db_index=True)


class Magazine():
...

class ArticleMagazineAllocation():
article = OneToOneField(Article, db_index=True)
magazine = ForeignKey(Magazine, db_index=True)
allocated_on = DateTimeField()

我可以从 Article 创建指向杂志的外键。或者,我可以使用 ArticleMagazineAllocation 模型连接两者,出于多种原因我更喜欢这种方式,以存储有关“分配”的额外数据。

对于第一种情况,查询将是:magazine_articles = Article.objects.filter(杂志=我的杂志)

对于第二个,查询将是:magazine_aticles = Article.objects.filter(articlemagazineallocation__magazine = mymagazine)

有很多(数百万)篇文章和几本(数百)本杂志,使用第二种方法会不会有相当大的速度损失?

最佳答案

如果您需要为需要有关关系本身的额外数据的多对多关系建模,您应该创建一个中间模型。为了直接查询相关模型,您可以在任一模型上放置一个 ManyToMany 字段,使用选项 through。要查询相关模型,您始终可以在 Django 中使用双下划线查询语法。

https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ManyToManyField.through

至于性能,您可以使用select_relatedprefetch_related 查询跨多个表的大型数据集。

关于django - 查询速度反转 OneToOneField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com