【发布时间】:2011-07-22 13:29:39
【问题描述】:
我有一个第三方 Django 应用程序 (Satchmo),它有一个名为 Product 的模型,我在我的 Django 站点中广泛使用它。
我想添加通过颜色搜索产品的功能。所以我创建了一个名为ProductColor 的新模型。这个模型大概是这样的……
class ProductColor(models.Model):
products = models.ManyToManyField(Product)
r = models.IntegerField()
g = models.IntegerField()
b = models.IntegerField()
name = models.CharField(max_length=32)
当商店产品的数据加载到站点时,产品的颜色数据用于创建一个ProductColor 对象,该对象将指向该Product 对象。计划是允许用户通过以下方式搜索产品搜索颜色范围。
我似乎无法弄清楚如何将此查询放入 QuerySet。我可以做这个...
# If the color ranges look something like this...
r_range, g_range, b_range = ((3,130),(0,255),(0,255))
# Then my query looks like
colors_in_range = ProductColor.objects.select_related('products')
if r_range:
colors_in_range = colors_in_range.filter(
Q(r__gte=r_range[0])
| Q(r__lte=r_range[1])
)
if g_range:
colors_in_range = colors_in_range.filter(
Q(g__gte=g_range[0])
| Q(g__lte=g_range[1])
)
if b_range:
colors_in_range = colors_in_range.filter(
Q(b__gte=b_range[0])
| Q(b__lte=b_range[1])
)
所以我最终得到了一个 QuerySet,其中包含该颜色范围内的所有 ProductColor 对象。然后我可以通过访问每个ProductColor 属性的products ManyToMany 属性来构建Products 的列表。
我真正需要的是Products 的有效查询集。这是因为将对这些结果执行其他逻辑,并且需要对 QuerySet 对象进行操作。
所以我的问题是如何构建我真正想要的 QuerySet?如果做不到这一点,是否有一种有效的方法来重新构建 QuerySet(最好不要再次访问数据库)?
【问题讨论】:
标签: django django-queryset satchmo