我试图从视图中挤出几毫秒。我想避免从我不会使用的ForeignKey
模型中加载一些非常大的文本字段。
更清楚:
class Foo(models.Model):
slug = models.SlugField()
text1 = models.TextField()
text2 = models.TextField()
...
@models.permalink
def get_absolute_url(self):
return ('foo_detail', (), {"object_id": self.pk, "object_slug": self.slug})
class Bar(models.Model):
foo = models.ForeignKey(Foo)
...
然后在模板中:
{% for bar in bars %}
{{ bar.foo.get_absolute_url }}
{% endfor %}
现在,如果您查看orm发出的查询,对于每个foo
,Django会检索每个字段(按预期方式),但最终只需要pk
和slug
。就我而言,在我的测试机上,每个对象的总和大约相当于百分之一秒。
当然我可以写一个像这样的方法:
class Bar(models.Model):
...
def get_foo_absolute_url(self):
return Foo.objects.only('pk', 'slug').get(pk=self.foo).get_absolute_url()
并在模板中使用它,但它很丑陋。
有没有人遇到同样的问题并想出更好的解决方案?
答案 0 :(得分:0)
我们有类似的问题,但我们转移到另一个解决方案 - 在memcache / state缓存中缓存的URL或在模型字段中预先计算。
我们测试了 models.permalink 所做的网址反向正在降低性能。