我有以下数据库布局,
用户(有一个) User_Profile
User_Profile (没有,一个或多个) World_Profile
World_Profile (有一个)世界
我想选择所有世界对象的列表,如果用户存在世界个人资料 世界个人资料也。
World 表的属性为is_public。我想获得所有 World 的列表,其中包含is_public = True,或者用户的 World_Profile 。
我怀疑它与select_related术语有关,但我还没有成功。任何帮助将不胜感激。
表格属性
用户(username,first_name,last_name,email) User_Profile(用户名(FK->用户),info,foo,bar) World_Profile(user_profile(FK),world(FK),character_name,gold) 世界(world_name,game_speed,is_public,requires_subscription)
filter_string = Q(is_public = True) | Q(worldprofile__user_profile__user=user)
World.objects.select_related().filter(filter_string)
经过大量的试验和错误后找到了解决方案,不确定为什么worldprofile不需要下划线,我必须检查出来。谢谢大家。
答案 0 :(得分:1)
简单的部分是获取当前登录的用户,该用户可在request.user
中找到。由于django提供反向关系"免费",您可以执行以下操作:
user = request.user
user.user_profile.world_profile_set.filter(world__is_public=True)
答案 1 :(得分:0)
filter_string = Q(is_public = True) | Q(worldprofile__user_profile__user=user)
World.objects.select_related().filter(filter_string)
经过大量试验和错误后找到解决方案,不确定为什么worldprofile不需要下划线,我必须检查出来。谢谢大家。