output = self.handle(*args, **options) File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 78, in handle raise e File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 69, in handle main() File “/home/NBSystem/value_search/management/commands/value_adjust.py”, line 40, in main ).first() File “/usr/local/lib/python3.10/dist-packages/django/db/models/query.py”, line 1095, in first self._check_ordering_first_last_queryset_aggregation(method=”first”) File “/usr/local/lib/python3.10/dist-packages/django/db/models/query.py”, line 2020, in _check_ordering_first_last_queryset_aggregation raise TypeError( TypeError: Cannot use QuerySet.first() on an unordered queryset performing aggregation. Add an ordering with order_by().

エラーが再度発生しました。このエラーは、集計を行っている間に順序付けされていないクエリセットに対してfirst()メソッドを使用しようとしていることが原因です。エラーメッセージにもありますが、order_by()メソッドを使用してクエリセットを順序付けする必要があります。

RakutenPriceSearch.objects.filter()の直後に.order_by('second_min_price')を追加してクエリセットを順序付けすることで、問題が解決されるはずです。修正されたコードは以下のようになります:

python
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') ).order_by('second_min_price').first() # レコードが見つかった場合にリストに追加 if second_min_price_record: second_min_price_records.append(second_min_price_record)

これにより、クエリセットが順序付けされ、first()メソッドが正常に動作するはずです。

未分類

Posted by ぼっち