0

我有一个模型:

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}
4

1 回答 1

0

要直接在模板中使用,最好的方法是创建自定义模板标签。查看模板标签文档

至于过滤代码本身,为模型定义中的字段提供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()

于 2012-11-24T16:17:46.110 回答