我有一个第三方 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
该颜色范围内的所有对象。Product
然后我可以通过访问products
每个属性的 ManyToMany 属性来构建一个 s 列表ProductColor
。
我真正需要的是一个有效的 QuerySet Product
。这是因为将对这些结果执行其他逻辑,并且需要对QuerySet
对象进行操作。
所以我的问题是如何构建我真正想要的 QuerySet?如果做不到这一点,是否有一种有效的方法来重新构建 QuerySet(最好不要再次访问数据库)?