サードパーティの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])
)
ProductColor
そのため、その色の範囲のすべてのオブジェクトを含むQuerySetになります。次に、各属性のManyToMany属性にProduct
アクセスして、のリストを作成できます。products
ProductColor
私が本当に必要としているのは、Product
sの有効なQuerySetです。これは、これらの結果に対して実行される他のロジックがあり、QuerySet
オブジェクトを操作する必要があるためです。
だから私の質問は、私が本当に欲しいQuerySetをどのように構築できるかということです。それが失敗した場合、QuerySetを再構築する効率的な方法はありますか(できればデータベースに再度アクセスすることなく)?