= 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# python3 manage.py value_adjust メッセージが送信されました。 メッセージが送信されました。 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 67, in handle raise e File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 58, in handle main() File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 28, in main second_min_price_records = RakutenPriceSearch.objects.exclude( 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 1484, in exclude return self._filter_or_exclude(True, 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 1499, 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 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#

エラーが発生しました。このエラーは、RakutenPriceSearchモデルにmin_priceというフィールドが存在しないために発生しています。min_priceというフィールドは、annotateメソッドで追加した仮想的なフィールドです。

エラーを解決するには、excludeメソッドでitemPriceMin1min_priceを比較する代わりに、Pythonコードでフィルタリングを行う必要があります。以下は、その方法の例です:

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 = [] for record in min_price_records: # 最安値でないレコードをフィルタリング second_min_price_record = RakutenPriceSearch.objects.filter( original_product_code=record['original_product_code'] ).exclude(itemPriceMin1=record['min_price']).values( 'original_product_code' ).annotate( second_min_price=Min('itemPriceMin1'), second_shopCode=Min('shopCode') ).first() # レコードが見つかった場合にリストに追加 if second_min_price_record: second_min_price_records.append(second_min_price_record)

この方法では、最安値でないレコードを手動でフィルタリングしています。これにより、min_priceitemPriceMin1を直接比較する必要がなくなります。

未分類

Posted by ぼっち