2

假设我有这个模型:

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 的所有“单词”字段。每个 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”?

我有外键关系的原因是因为数据来自一个多线程的服务器进程,并且只要感觉它就会输入“单词”。

那么有什么想法可以解决这个问题吗?

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

4

0 回答 0