メッセージが送信されました。 メッセージが送信されました。 Traceback (most recent call last): File “/home/NBSystem/manage.py”, line 22, in <module> main() File “/home/NBSystem/manage.py”, line 18, in main execute_from_command_line(sys.argv) File “/usr/local/lib/python3.10/dist-packages/django/core/management/__init__.py”, line 442, in execute_from_command_line utility.execute() File “/usr/local/lib/python3.10/dist-packages/django/core/management/__init__.py”, line 436, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File “/usr/local/lib/python3.10/dist-packages/django/core/management/base.py”, line 413, in run_from_argv self.execute(*args, **cmd_options) File “/usr/local/lib/python3.10/dist-packages/django/core/management/base.py”, line 459, in execute output = self.handle(*args, **options) File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 63, in handle raise e File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 54, in handle main() File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 28, in main second_min_price_records = RakutenPriceSearch.objects.filter(~Q(itemPriceMin1=F(‘min_price’)) ).values(‘original_product_code’).annotate(second_min_price=Min(‘itemPriceMin1’), second_shopCode=Min(‘shopCode’) ) File “/usr/local/lib/python3.10/dist-packages/django/db/models/manager.py”, line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File “/usr/local/lib/python3.10/dist-packages/django/db/models/query.py”, line 1476, in filter return self._filter_or_exclude(False, args, kwargs) File “/usr/local/lib/python3.10/dist-packages/django/db/models/query.py”, line 1494, in _filter_or_exclude clone._filter_or_exclude_inplace(negate, args, kwargs) File “/usr/local/lib/python3.10/dist-packages/django/db/models/query.py”, line 1501, in _filter_or_exclude_inplace self._query.add_q(Q(*args, **kwargs)) File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1613, in add_q clause, _ = self._add_q(q_object, self.used_aliases) File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1645, in _add_q child_clause, needed_inner = self.build_filter( File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1472, in build_filter return self._add_q( File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1645, in _add_q child_clause, needed_inner = self.build_filter( File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1504, in build_filter value = self.resolve_lookup_value(value, can_reuse, allow_joins, summarize) File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1274, in resolve_lookup_value value = value.resolve_expression( File “/usr/local/lib/python3.10/dist-packages/django/db/models/expressions.py”, line 854, in resolve_expression return query.resolve_ref(self.name, allow_joins, reuse, summarize) File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 2014, in resolve_ref join_info = self.setup_joins( File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1867, in setup_joins path, final_field, targets, rest = self.names_to_path( File “/usr/local/lib/python3.10/dist-packages/django/db/models/sql/query.py”, line 1772, in names_to_path raise FieldError( django.core.exceptions.FieldError: Cannot resolve keyword ‘min_price’ into field. Choices are: affiliateRate, affiliateUrl, asurakuArea, asurakuClosingTime, asurakuFlag, availability, catchcopy, created_at, creditCardFlag, endTime, genreId, giftFlag, imageFlag, itemCaption, itemCode, itemName, itemPrice, itemPriceBaseField, itemPriceMax1, itemPriceMax2, itemPriceMax3, itemPriceMin1, itemPriceMin2, itemPriceMin3, itemUrl, mediumImage1, mediumImage2, mediumImage3, original_product_code, pointRate, pointRateEndTime, pointRateStartTime, postageFlag, reviewAverage, reviewCount, shipOverseasArea, shipOverseasFlag, shopAffiliateUrl, shopCode, shopName, shopOfTheYearFlag, shopUrl, smallImage1, smallImage2, smallImage3, startTime, tagIds, taxFlag, updated_at root@531a0c7c5e99:/home/NBSystem#
エラーが発生しました。このエラーは、Qオブジェクト内でFオブジェクトを使用しているために発生しています。Qオブジェクト内でのFオブジェクトの使用は、そのようなフィールドがモデルに存在する場合にのみ機能します。
エラーメッセージによれば、RakutenPriceSearchモデルにはmin_priceという名前のフィールドが存在しないため、F('min_price')を使用することができません。代わりに、別の方法を使用して最小価格をフィルタリングする必要があります。
可能な解決策の一つは、annotateでmin_priceを定義する際にMin関数の結果を使っており、その後のfilterでitemPriceMin1と比較する方法です。以下はその例です:
python
from django.db.models import Min, F, Q from .models import RakutenPriceSearch # original_product_codeごとの最安値とそのショップコードを取得 min_price_records = RakutenPriceSearch.objects.values('original_product_code').annotate( min_price=Min('itemPriceMin1'), shopCode=Min('shopCode') ) # 最安値の次に安い価格とそのショップコードを取得 second_min_price_records = RakutenPriceSearch.objects.exclude( itemPriceMin1=F('min_price') # 最安値でないレコードをフィルタリング ).values('original_product_code').annotate( second_min_price=Min('itemPriceMin1'), second_shopCode=Min('shopCode') )
このようにexcludeを使用してitemPriceMin1とmin_priceを比較し、最安値でないレコードをフィルタリングすることができます。

ディスカッション
コメント一覧
まだ、コメントがありません