2016-03-24 3 views
0

私は自分のプロジェクトに適切なクエリを得るのに苦労しています。ここに私のモデルの一例である:外国のフィルタと多対多の関係フィールド

私はProduct.collection

のEG値に基づいて、すべてのBrand_name取得しようとしています:靴を私はcollectionのためのすべてのBrand_nameを取得したい、Product.collectionです - 靴

私は__方法も試しました。どういうわけか、それは動作していません。

+0

「コレクション」とは何ですか?あなたが 'type'(CharField)という属性を持つモデル' Collection'を持っていれば、多対多フィールドを 'collections = models.ManyToManyField(Collection)'として宣言することができます。 '' shoes = collections.filter(type = 'shoe') 'を実行することによって(' 'Collection.type == 'shoe''によって靴が識別されたと仮定します)。または、 'Collection'を' Brand'にして、 'Brand.name == 'shoe''を' True'にしますか?あなたの質問は本当に明確ではありません。 –

答えて

0

あなたはこのような何か試してみてください:、以下のようなあなたのforeign keyrelated_nameを追加

brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, blank=True, 
          null=True, related_name='products') 

そしてあなたは、クエリの下に試すことができ、それはあなたのlistを返します

Brand.objects.product_set.filter(collections__name="Shoes").values('brand__name') 
+0

'Brand.objects.product_set.filter'はモデル' Product'のQuerySetを返しますが、 'Product'は属性' name'を持っていません( 'values( 'name')'によって要求されます)。 'all'も除外されるべきです。 @dreamerは 'Product'のある属性に基づいて' Brand.name'をすべて望んでいると思います。 –

+0

あなたが正しいとしたら、 'name'を 'brand__name'で置き換えることができます。 –

-1

を全てBrand.nameであり、product__collections_name='Shoes'を有する。

Brand.objects.filter(products__collections__name='Shoes').values_list('name', flat=True) 
+1

'' brand_name''を 'related_name'として選んだら、おそらく少し誤解を招くかもしれません。 –

+0

@a_guest:真。修正をありがとう。 :) –

0
Brand.objects.filter(
    product__collection=product.collection 
).values_list('name', flat=True).distinct() 

productProductのインスタンスです。