【发布时间】:2016-06-23 23:59:08
【问题描述】:
当 Entry 对象的数量大于 5000 个条目时,django 中有没有办法更有效地执行以下操作?
models.py
class Entry(models.Model):
user = models.TextField(db_column='User', blank=True)
date = models.DateTimeField(blank=True)
class Color(models.Model):
color = models.TextField(blank=True)
entry = models.ForeignKey(Entry)
假设我想获取每个条目的所有颜色...
entrys = Entry.objects.all()
for e in entrys:
print e.color_set.all()
我希望能够将每个对象与特定条目相关联。例如,在这样的 csv 表中。
user, color
john, blue
john, orange
bob, green
bob, red
bob, purple
浏览我的所有条目需要几秒钟的时间。有没有更好的办法?
【问题讨论】:
-
你可以换一种方式。获取所有 Color 对象并按
entry排序,然后迭代。 -
你可以按照an answer I just made on a different question使用
prefetch_related -
要扩展@Sayse 评论,
selected_related也可以是一个选项。 docs.djangoproject.com/en/1.9/ref/models/querysets/… 你基本上是想做一个急切的加载。 -
@themanatuf -
select_related不是一个选项,因为它不适用于一对多 -
@Sayse 是的,你是对的,但如果原始海报遵循@AKS 的建议,那么
select_related会起作用。
标签: python django optimization reverse-lookup