我有一个模特:
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}
答案 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()
对象