2012-11-23 35 views
0

我有一個模型:檢查模型實例是否在查詢集內被FKed?

class ProjectBookmark(models.Model): 
    user = models.ForeignKey(User) 
    project = models.ForeignKey('Project') 

說一個用戶查看一個項目,是有辦法以某種方式檢查,如果當前項目是在用戶的書籤不是一個討厭的方式,我通過爲波紋管的請求上下文做到這一點現在其他?基本上,用戶的書籤的項目清單,並檢查作爲

{%如果current_project在current_user.bookmarks%} ...

從模板裏面吧?

the_user = request.user 
bookmarked_projects = list() 
for b in ProjectBookmark.objects.filter(user = request.user): 
    bookmarked_projects.append(b.project_id) 
the_user.bookmarks = Project.objects.filter(id__in=bookmarked_projects) 
return {'current_user':request.user} 

回答

0

要直接在模板中使用,最好的方法是創建一個自定義模板標籤。檢查出template tag docs

至於過濾代碼本身,將related_name參數提供給模型定義中的ForeignKey字段會非常有幫助。例如:

class ProjectBookmark(models.Model): 
    user = models.ForeignKey(User, related_name="project_bookmarks") 
    project = models.ForeignKey('Project', related_name="bookmarks") 

這種方式,您可以訪問使用request.user.project_bookmarks.all()

包含所有用戶的書籤一個 QuerySet對象