私は2つのDjangoモデルを持っています。
アクティビティを保存するもの:
Activity:
-title #Exampe: sky diving
-category
-etc...
そして、ユーザーとそのアクティビティとのやり取りを保存するもの (例: 誰かがそれを行った場合)。レコードは、ユーザー インタラクションが発生した場合にのみ挿入されます。
UserActivity:
-user (Foreign key to user model) #Exampe: sky diving
-activity (Foreign key to Activity model)
-is_completed (boolean)
今、現在のユーザーがすでに完了したものを除いて、すべてのアクティビティを選択したいと思います:
activities = Activity.objects.exclude(
UserActivity__user=user,
UserActivity__is_completed=True
)
現在、これは期待どおりに機能していません。Django はアクティビティ ID のみに基づいて結合を行います。
LEFT OUTER JOIN "achievements_activity_rating" ON ("achievements_base_activity"."id" = "achievements_activity_rating"."activity_id")
他のユーザーが同じアクティビティの UserActivity レコードを持っている場合、同じアクティビティが重複として出力に何度も表示されます。Djangoに次のようなことをさせたいと思います:
LEFT OUTER JOIN "achievements_activity_rating" ON (
"achievements_base_activity"."id" = "achievements_activity_rating"."activity_id" AND "achievements_activity_rating"."user" = "username_of_current_user")
この問題を Django ORM で解決できますか? 私のモデルは奇妙なパターンではないと思うので、これに対する優れた一般的な解決策を期待しています。