他の表項目を使用してフィルタリング[202,1091]
今回も,現在進行中のクローンプロジェクトにおける難点について述べる.
簡単に言えば、テーブル内のアイテムではなく、テーブル内のアイテムをフィルタする方法です.
<ディレクトリ>
1.スタート
2.解決プロセス
3.解決方法
まず問題の原因を説明してから、次のように話します.
進行中のプロジェクトモデリングを上図に示します.私たちがしなければならないフィルタリングは、SubCategoryのmain category idを使用して製品をフィルタリングすることです.
ただし、テーブル内のアイテムではなく、テーブル内のアイテムをフィルタする方法はわかりません.
本当にいろいろな方法を試したことがあるようです.たとえば、set.all()メソッドを使用して、逆参照製品を使用します.subcategory.main category idでアクセスしてみます.
方法が見つからないのでmain category idではなく、製品のsub category idでフィルタリングすることをお勧めします.プロジェクトを一緒に行ったあるメンバーが再考の意見を出し、Djangoの公式文書をめくる際にダブルベーススコア()で解決できるという意見を出してGoogle化しました.
しかし、私たちが使いたい方法の例が見つからず、本当にずっとシャベルをしています.△4時間から5時間ぐらい、そのために三人で顔を合わせて悩んだことがある.
最後にこのような試みを経て、ついに解決策を見つけた.方法は以下の通りである.
この方法で、接続されたテーブル内のアイテムをフィルタできます.
上記の表の項目にフィルタリングする理由を簡単に説明すると、製品の詳細ページを表示するときに関連商品を推奨するサービスを提供したいと思います.我々の場合,関連商品として同じmain categoryを持つ商品を推薦するために,このような試みを行った.
ちなみに、私たちが行ったプロジェクトの詳細ページコードは以下の通りです.
推奨商品についてはfor文を用いて繰り返し,List理解を用いた.今はまだリストを書くのが苦手なので、同じメンバーで書きました.しかし、全体の論理は私が編んだもので、詳細ページでは私の好きな部分のようです.
昨日を基準にして、最初のプロジェクトが終わりました.これについて、ブログ記事をもう一つ送りたいと思います.
それはここまでです.
簡単に言えば、テーブル内のアイテムではなく、テーブル内のアイテムをフィルタする方法です.
<ディレクトリ>
1.スタート
2.解決プロセス
3.解決方法
1.スタート
まず問題の原因を説明してから、次のように話します.
進行中のプロジェクトモデリングを上図に示します.私たちがしなければならないフィルタリングは、SubCategoryのmain category idを使用して製品をフィルタリングすることです.
ただし、テーブル内のアイテムではなく、テーブル内のアイテムをフィルタする方法はわかりません.
本当にいろいろな方法を試したことがあるようです.たとえば、set.all()メソッドを使用して、逆参照製品を使用します.subcategory.main category idでアクセスしてみます.
2.解決プロセス
方法が見つからないのでmain category idではなく、製品のsub category idでフィルタリングすることをお勧めします.プロジェクトを一緒に行ったあるメンバーが再考の意見を出し、Djangoの公式文書をめくる際にダブルベーススコア()で解決できるという意見を出してGoogle化しました.
しかし、私たちが使いたい方法の例が見つからず、本当にずっとシャベルをしています.△4時間から5時間ぐらい、そのために三人で顔を合わせて悩んだことがある.
3.解決方法
最後にこのような試みを経て、ついに解決策を見つけた.方法は以下の通りである.
related_products = Product.objects.filter(sub_category__main_category_id = main_id)
この表(我々の場合はProduct Table)では、Forign Keyを有する項目により、フィルタリングする項目(我々の場合はmain categroy id)をダブルベーススコア()に接続すればよい.この方法で、接続されたテーブル内のアイテムをフィルタできます.
上記の表の項目にフィルタリングする理由を簡単に説明すると、製品の詳細ページを表示するときに関連商品を推奨するサービスを提供したいと思います.我々の場合,関連商品として同じmain categoryを持つ商品を推薦するために,このような試みを行った.
ちなみに、私たちが行ったプロジェクトの詳細ページコードは以下の通りです.
class DetailView(View):
def get(self, request, product_id):
try:
if not Product.objects.filter(id = product_id).exists():
return JsonResponse({'MESSAGE' : 'NOT FOUND'}, status = 404)
product = Product.objects.get(id = product_id)
main_id = product.sub_category.main_category_id
related_products = Product.objects.filter(sub_category__main_category_id = main_id)
if related_products.count() < 10:
related_products = list(related_products)
else:
related_products = random.sample(list(related_products), 10)
selected_products = [{
"image_url" : current_product.productimage_set.first().image_url,
"price" : current_product.price,
"name" : current_product.name,
} for current_product in related_products]
return JsonResponse(
{
'id' : product.id,
'name' : product.name,
'price' : product.price,
'discount' : product.discount,
'sales_unit' : product.sales_unit,
'weight' : product.weight,
'shipping_type' : product.shipping_type,
'origin' : product.origin,
'package_type' : product.package_type,
'infomation' : product.infomation,
'created_at' : product.created_at,
'updated_at' : product.updated_at,
'sub_category' : product.sub_category.name,
'main_category' : product.sub_category.main_category.name,
'menu' : product.sub_category.main_category.menu.name,
'image_list' : [img.image_url for img in product.productimage_set.all()],
'allergy_list' : [allergies.name for allergies in product.allergy.all()],
'selected_products' : selected_products,
}, status = 200
)
except KeyError:
return JsonResponse({'MESSAGE' : 'KEY_ERROR'}, status = 400)
特におすすめ商品を10種類程度に暴露したい場合、10種類未満の関連商品のためにコードを作成したものもあり、上記のコードの10-14行目を参考にすることができます.推奨商品についてはfor文を用いて繰り返し,List理解を用いた.今はまだリストを書くのが苦手なので、同じメンバーで書きました.しかし、全体の論理は私が編んだもので、詳細ページでは私の好きな部分のようです.
昨日を基準にして、最初のプロジェクトが終わりました.これについて、ブログ記事をもう一つ送りたいと思います.
それはここまでです.
Reference
この問題について(他の表項目を使用してフィルタリング[202,1091]), 我々は、より多くの情報をここで見つけました https://velog.io/@hollibleling/다른-테이블-항목을-이용한-필터링-20210911テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol