检查模型实例是否在查询集中是FKed?

时间:2012-11-23 23:45:57

标签: django django-models

我有一个模特:

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

说一个用户正在查看项目,有没有办法以某种方式检查当前项目是否在用户书签中,而不是讨厌的方式我现在通过请求上下文执行此操作?基本上,用户书签是一个项目列表,并检查为

  

{%if current_project in 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}

1 个答案:

答案 0 :(得分: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")

这样您就可以使用QuerySet

访问包含所有用户书签的request.user.project_bookmarks.all()对象