假设我有这个模型:
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进行组合,然后再根据时间对它们进行排序。最后这会导致更少的查询,但我必须至少两次排序,这不是很快。