我有以下型号:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True, related_name='profile')
starred_authors = models.ManyToManyField(Author, related_name='users_with_stars')
class Author(models.Model):
name = models.CharField(max_length=250)
slug = models.SlugField(unique=True)
然后在作者模板中,我想显示当前登录的用户是否已为该作者加注星标,但我在构建合适的查询以使用 ORM 获取此数据时遇到了麻烦。
在视图中,我曾考虑使用计数来注释作者对象,如果作者没有被加注星标,则计数为 0,如果加注星标则为 1。像这样的东西:
def author_detail(request, slug):
user_id = request.user.pk
author = Author.objects.filter(slug=slug).filter(users_with_stars__user__pk=user_id).annotate(fav=Count('users_with_stars'))[0]
return render_to_response('app/author_detail.html',
{ 'author': author},
context_instance=RequestContext(request))
但上述情况并不好,因为如果当前用户没有给作者加星标,则找不到对象。我想做的是以某种方式将最后一个过滤器放在注释中,但我无法让它工作。
理想情况下,我想在模板中执行以下操作:
{% if author.fav %}
<p>This is one of your favorite authors</p>
{% endif %}
任何建议表示赞赏。