我有以下模特:
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()然后使用相关的管理器来获取特定产品的参数,是否意味着每个产品都有数据库?
第二种方法是在一个查询中获取所有产品,然后获取所有参数。 然后将它们分组到列表/字典中。
哪种方法最好?或许还有另一种方法?
谢谢。
答案 0 :(得分:0)
您的架构确实不适合查询。您将很快遇到最糟糕的情况查询行为(对产品的每种类型的修改都有2个查询。我建议您查看django-shop-simplevariations的模式,看看它们如何实现快速查找(提示,架构的结构使prefetch_related有效)。