我有两个 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 仅基于 Activity ID 进行连接,并且:
LEFT OUTER JOIN "achievements_activity_rating" ON ("achievements_base_activity"."id" = "achievements_activity_rating"."activity_id")
如果其他用户有相同 Activity 的 UserActivity 记录,这将使相同的 Activity 在输出中多次显示为重复项。我想我希望 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 解决这个问题吗?我认为我的模型不是一个奇怪的模式,所以我期待一个好的通用解决方案。