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

时间:2014-10-02 17:12:19

标签: python django django-models django-database django-1.7

假设我有这个模型:

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和十倍于它们的MoreLogModel。

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

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

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_log_models”?

我之所以拥有外键关系是因为数据来自一个多线程的服务器进程,只要它感觉就会放入“word”。

那么一般来说我是如何解决这个问题的?

同时 我之前使用的另一种方法是只有一个具有单词字段和group_id的模型。这个单词字段只包含一个单词,每个单词都有一个条目。这导致'log_stuff'被复制,但我没有看到一个大问题。一个巨大的问题是通过所有这些日志并根据组ID进行组合,然后再根据时间对它们进行排序。最后这会导致更少的查询,但我必须至少两次排序,这不是很快。

0 个答案:

没有答案