簡體   English   中英

Django 1.7 - SQL - 從可能存在或不存在關系的一對多關系中獲取數據

[英]Django 1.7 - SQL - Get data from One-To-Many relationship where relation may or may not exist

我有以下數據庫布局,

用戶(有一個) User_Profile
User_Profile (沒有,一個或多個) World_Profile
World_Profile ( 有一個 ) World

我想選擇所有的世界對象的列表,如果全球的形象存在於用戶登錄的世界簡介

World表具有屬性 is_public。 我想獲得所有具有 is_public = True 或用戶具有World_Profile世界的列表。

我懷疑它與 select_related 術語有關,但我還沒有成功。 任何幫助將非常感激。

表屬性

用戶(用戶名,名字,姓氏,電子郵件)用戶配置文件(用戶名(FK->用戶),信息,foo,bar)世界配置文件(用戶配置文件(FK),世界(FK),字符名稱,黃金)世界(世界名稱,游戲速度,is_public, requires_subscription)

解決了

filter_string = Q(is_public = True) | Q(worldprofile__user_profile__user=user)
World.objects.select_related().filter(filter_string)

經過大量試驗和錯誤后找到了解決方案,不知道為什么 worldprofile 不需要下划線,我必須檢查一下。 謝謝大家。

Burhan Khalid 有一個更好的答案。 用戶 = request.user user.user_profile.world_profile_set.filter(world__is_public=True)

最簡單的部分是獲取當前登錄的用戶,它在request.user可用。 由於 django “免費”提供反向關系,您可以執行以下操作:

user = request.user
user.user_profile.world_profile_set.filter(world__is_public=True)
filter_string = Q(is_public = True) | Q(worldprofile__user_profile__user=user)
World.objects.select_related().filter(filter_string)

經過大量試驗和錯誤后找到了解決方案,不知道為什么 worldprofile 不需要下划線,我必須檢查一下。 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM