У меня есть стороннее приложение 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 каждого атрибута ProductColor
.
Что мне действительно нужно, так это действительный набор запросов Product
с.Это потому, что будет другая логика, которая будет работать с этими результатами, и она должна работать с QuerySet
объектом.
Итак, мой вопрос: как я могу создать QuerySet, который мне действительно нужен?И если это не удастся, есть ли эффективный способ перестроить QuerySet (желательно без повторного попадания в базу данных)?