如何在Django中评估QuerySets?

时间:2013-11-13 20:04:15

标签: django orm django-queryset

我有以下模特:

class Product(models.Model):
    """
    Basic product
    """

    name = models.CharField(max_length=100, db_column='name', unique=True)
    url = models.SlugField(max_length=100, db_column="url", unique=True, db_index=True)
    description = HTMLField(db_column='description')
    category = models.ForeignKey(Category, db_column='category', related_name='products')

class FirstObject(Product):
    pass

class FirstProduct(models.Model):
    product = models.ForeignKey(FirstObject, db_column='product')
    color = models.ForeignKey(Color, db_index=True, db_column='color')

class SecondObject(Product):
    pass

class SecondProduct(models.Model):
    product = models.ForeignKey(SecondObject, db_column='product')
    diameter = models.PositiveSmallIntegerField(db_column='diameter')

换句话说,我有两种不同类型的产品(具有不同的参数)。

我想要特定类别(在类别中只能是一种类型的产品,我知道什么)选择具有适当参数的所有产品。

如何有效地完成这项工作?

如果我编写Category.objects.get(id = id).products.all()然后使用相关的管理器来获取特定产品的参数,是否意味着每个产品都有数据库?

第二种方法是在一个查询中获取所有产品,然后获取所有参数。 然后将它们分组到列表/字典中。

哪种方法最好?或许还有另一种方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的架构确实不适合查询。您将很快遇到最糟糕的情况查询行为(对产品的每种类型的修改都有2个查询。我建议您查看django-shop-simplevariations的模式,看看它们如何实现快速查找(提示,架构的结构使prefetch_related有效)。