1

Product モデルに関連付けることができる抽象 ProductAttribute モデルがあります。属性には、product.attribute_values を使用してアクセスできます。

ユーザーが 2 つの属性 (Size と Weight) の値を指定できるようにする 2 つの選択ボックスを含むフォームがあるとします。

単一のクエリで、これらの値をフィルターに渡すにはどうすればよいですか? 整数のリストを使用する場合と同様に、Object.objects.filter(pk__in=(1,2,3))これらすべての属性値に一致する製品を選択できますか?

次のようなことができるようになりたいです。

options = ['XL','50lbs']
p = Product.objects.filter(attribute_values__matches=options)

これは Django のワンライナーで可能ですか?

ティア

4

2 に答える 2

3

__containsまたは使用できます__exact

大文字と小文字を区別しない一致の__icontains場合__iexact

モデル ルックアップを使用Qして、フィルタリングを行うことができます。

options = ['X1', 'X2', 'X3']
qs = [Q(attribute_name=option) for option in options] #or attribute_name__icontains - or whatever

query = qs.pop() #get the first element

for q in qs:
    query |= q

qs = MyModel.objects.filter(query)
于 2013-08-17T20:04:28.037 に答える
0

上記の @karthikr と Q.add() メソッドの助けを借りて、これをクラックしました。

options = {'Size':'XL'}
qs = Q()
for key, val in options.iteritems():
qs.add(Q(attributes__name=key) & Q(attribute_values__value_option__option=val), qs.connector)

これが将来、他の誰かに少しでも役立つことを願っています。

于 2013-08-17T21:58:44.503 に答える