簡體   English   中英

如何過濾外鍵關系

[英]How to filter on a foreign key relationship

我有以下型號:

class UserProfile(models.Model):
    user = models.OneToOneField(User)

class Site(models.Model):
    user = models.ForeignKey(User)
    site_name = models.CharField(max_length=128, blank=False, null=False)

class Team(models.Model):
    site = models.ForeignKey(Site)
    team_member_name = models.CharField(default='name', max_length=128, blank=False, null=False)

我有一個列出數據庫中所有team成員的視圖:

@login_required
def home(request, team_member_id=None):
    team_members = Team.objects.all().order_by('team_member_name')

如何過濾此內容,以便僅顯示與登錄user具有相同site團隊成員?

嘗試這個。

@login_required
def home(request, team_member_id=None):
    user = request.user
    team_members = Team.objects.all().filter(site__user=user).order_by('team_member_name')

這里這里這里的相關文檔。

您可以使用model relations來實現此目的。

要按不同模型中的字段排序,請使用與跨模型關系查詢時相同的語法。 也就是說,字段名稱,后跟雙下划線(__),后跟新模型中的字段名稱,依此類推。

在您的情況下,以下方法應該起作用:

team_members = Team.objects.filter(site__user=user).order_by('team_member_name')

這可以單行完成,但是讓我解釋一下,以便您可以理解這個概念:

您可以使用@login_required來從請求中登錄用戶(訪問視圖的用戶將始終登錄)

loggedin_user = request.user

獲取用戶的網站:

site_of_logged_in_user = Site.objects.get(user=loggedin_user)
# if there can be only one site for a user

現在您可以通過按站點過濾來獲得團隊

team = Team.objects.filter(site=site_of_logged_in_user)

暫無
暫無

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

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