【发布时间】:2014-12-26 05:36:26
【问题描述】:
我在 Django 中有一个 ListView,我在其中列出了所有对象。一些对象由经过身份验证的用户添加书签。
每个对象都有一个关系bookmarks = GenericRelation(Bookmark)。
如何检查看到ListView 的用户是否为每个特定对象添加了书签?
我认为如果我在模板中检查它会花费很多 sql 查询。
编辑
我的Bookmark 模特:
class Bookmark(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
user = models.ForeignKey(settings.AUTH_USER_MODEL)
我的Post 模特:
class Post(models.Model):
title = models.CharField(max_length=100)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
bookmarks = generic.GenericRelation(Bookmark)
我的列表视图:
class PostListView(ListView):
model = Post
template_name = 'resource/post_list.html'
我的猜测是我需要创建一个方法get_queryset(),在该方法中我为每个对象检查是否存在带有user=self.request.user 的书签对象。
编辑 2
我不想过滤任何东西。我想要模型中的所有对象,但是当我在模板中循环我的查询集时,我想确定经过身份验证的用户是否为特定对象添加了书签。所以我想我需要用一个额外的字段来填充查询集中的每个对象,告诉用户是否为特定对象添加了书签。我只是不知道该怎么做。
【问题讨论】:
-
您能分享您的书签模型和列出的对象模型及其字段吗?
-
我已将模型和列表视图添加到我的问题中。
-
我已经尽力帮助您并进行了一些研究 - Django 不提供“条件注释”,所以我认为您可以通过三种方式解决您的问题:1) 额外使用 django,但我对 stackoverflow.com/questions/26716843/… 2) 有问题,编写像 gist.github.com/vinilios/225997 这样的自定义聚合函数并将其与 django
annotate3) 一起使用定义两个查询集并将它们简单地组合到您的模板中 -
已解决问题,请尽快发布解决方案
标签: django templates django-models django-templates django-views