从多个模型检索所有相关对象时,如何限制查询的数量?

2024-03-28 16:09:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这个模型:

class MyLogModel(models.Model):
  log_stuff = models.CharField(max_length)

class MoreLogModel(models.Model):
  word = models.CharField(max_length)
  my_log_model = models.ForeignKey(MyLogModel, related_name="more_log_models")

现在想象一下有1.000.000.000个MyLogModel和10倍以上的LogModel与它们相关

在我看来,我想向用户展示最新的100个MyLogModel以及MoreLogModel中与它们相关的所有“word”字段。平均每个MyLogModel应该有10个以上的logmodel

但如果我只使用(伪代码):

my_log_model_query = MyLogModel.objects.get_latest_100

然后在模板中循环,始终放置另一个循环:

{% for my_log in  my_log_model_query %}
  {% for more_log_model my_log.more_log_models %}
    {{ more_log_model.word }}
  {% endfor %}
{% endfor %}

这将导致大量的数据库查询,对吗

所以我想知道的是,是否有可能查询所有MyLogModel,并且相关的“more\u log\u models”已经在该模型所附的列表中

我之所以使用外键关系,是因为数据来自一个多线程的服务器进程,它可以随时输入“word”

有什么办法可以解决这个问题吗

另外: 我以前使用的另一种方法是只有一个模型,其中有一个单词域和一个组id。然后这个单词域只包含一个单词,每个单词都有一个条目。这会导致“日志内容”被复制,但我不认为这有什么大问题。一个巨大的问题是遍历所有这些日志,并根据组ID将它们组合起来,然后再次根据时间对它们进行排序。最终这会减少查询,但我必须对所有内容至少排序两次,这不是很快


Tags: 模型logmodelmodelsmymore单词length