0

我有以下型号:

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() 然后使用相关的管理器来获取特定产品的参数,这是否意味着每个产品都会命中数据库?

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

什么方法是最好的?或者也许还有另一种方法?

谢谢你。

4

1 回答 1

0

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

于 2013-11-13T22:39:02.413 回答