【发布时间】:2010-10-26 01:06:47
【问题描述】:
在 Django 中,我有两个模型:
class Product(models.Model):
name = models.CharField(max_length = 50)
categories = models.ManyToManyField(Category)
class ProductRank(models.Model):
product = models.ForeignKey(Product)
rank = models.IntegerField(default = 0)
我将排名放到一个单独的表中,因为页面的每个视图都会导致排名发生变化,而且我担心所有这些写入操作会使我的其他(主要是读取)查询变慢。
我从一个简单的查询中收集了Products 的列表:
cat = Category.objects.get(pk = 1)
products = Product.objects.filter(categories = cat)
我现在想获得这些产品的所有排名。我宁愿一次性完成所有操作(使用 SQL 连接),并且想知道如何使用 Django 的查询机制来表达。
在 Django 中执行此操作的正确方法是什么?
【问题讨论】:
-
听起来像是过早的优化。您是否有任何分析器证据表明“所有这些写入都会使我的其他查询变慢”?或者当您需要阅读排名时,这种效果比额外 JOIN 的减速更糟糕?先用简单的方法写出来,在证明有必要之前不要优化。