我有两个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解决这个问题吗?我认为我的模型不是一个奇怪的模式,所以我希望有一个很好的通用解决方案。
答案 0 :(得分:0)
首先您只需要选择current_user
的活动activities = Activity.objects.filter(user=current_user).exclude( UserActivity__is_completed=True)
编辑:
activities = UserActivity.objects.all().exclude(user=current_user,is_completed=True)
activities_set =[]
for activity in activities:
activities_set.append(Activity.objects.filter(pk=activity))