/ /クエリセットから重複を削除しますdjango-django、web、django-models

クエリーセットから重複を削除するdjango - django、web、django-models

私はこのクエリセットを私のdjangoデータベースに作成しました:

 material_purchase=Material_Purchase.objects.order_by("material__id","-purchase__date").values("id","material__id","price","purchase__date")

それは私にこれを返しました:

<QuerySet [{"id": 8, "material__id": 1, "price": Decimal("6.00"), "purchase__date": datetime.date(2018, 5, 31)}, {"id": 2, "material__id": 1, "price": Decimal("5.00"), "purchase__date": datetime.date(2018, 4, 29)}, {"id": 9, "material__id": 1, "price": Decimal("3.00"), "purchase__date": datetime.date(2017, 12, 1)}, {"id": 7, "material__id": 2, "price": Decimal("10.00"), "purchase__date": datetime.date(2018, 5, 31)}, {"id": 5, "material__id": 2, "price": Decimal("20.00"), "purchase__date": datetime.date(2018, 5, 16)}, {"id": 1, "material__id": 2, "price": Decimal("27.00"), "purchase__date": datetime.date(2018, 4, 29)}, {"id": 10, "material__id": 2, "price": Decimal("5.00"), "purchase__date": datetime.date(2017, 12, 1)}, {"id": 6, "material__id": 3, "price": Decimal("6.00"), "purchase__date": datetime.date(2018, 5, 31)}, {"id": 11, "material__id": 3, "price": Decimal("5.00"), "purchase__date": datetime.date(2017, 12, 1)}]>

重複するオブジェクトをすべて削除したい最初の(最新のもの)を除いて、同じ「material__id」を使用します。 私は最初に.distinctを使用してこれを実行しようとしましたが、データベースがsqlite3であるため、エラーが発生します。

回答:

回答№1は0

私はあなたが .distinct() querysetメソッド、 material 引数として、次のようなものがあります。

Material_Purchase.objects.order_by("material__id","-purchase__date").values("id","material__id","price","purchase__date").distinct("material__id")

回答№2の場合は0

を使用する .distinct("material_id") querysetメソッドはPostgreSQLでのみ機能します(ドキュメントを参照してください) ここに)。

何らかの理由で本当にsqliteを使用する必要がある場合は、これは、はるかに効率の低いクエリで実現できます。最初に必要なマテリアルのpkを取得し、次に最終的なクエリでそれらのpkをフィルタリングします。