我有一个可以被用户标记的模型(我们称之为' item')。标签特定于每个用户。因此,例如,一个项目可以由多个用户拥有多个标签。我需要向用户显示所有项目的列表。在该列表中,我希望能够仅显示当前登录用户拥有的每个项目的标签。我希望有一种相当简单的方法来实现这一目标,但我一直无法在文档中找到任何有用的信息。提前谢谢。
class Item
tags = ManyToManyField('tags.Tag')
class Tag
user = ForeignKey('auth.User')
因此,我收集要在页面上显示的项目的查询集,并在模板中列出它们。我希望能够仅为查询集中的每个项目显示当前登录用户拥有的标记。
{% for item in items %}
{% for tag in item.tags %}
DISPLAY TAGS OWNED BY LOGGED IN USER
{% endfor %}
{% endfor %}
这就是我想要实现的目标^
答案 0 :(得分:0)
一种方法是将属性添加到您可以在视图中设置的Item类user_tags
,然后将标记过滤为仅匹配登录用户的那些。
# models.py
class Item(models.Model):
...
user_tags = []
...
# views.py
items = Item.objects.all().select_related('tags')
for item in items:
item.user_tags = [tag for tag in item.tags if tag.user = logged_in_user]
然后在你的模板中你可以迭代它们:
{% for item in items %}
{{ item }}
{% for tag in item.user_tags %}
{{ tag }}{% ifnot forloop.last %}, {% endif %}
{% endfor %}
{% endfor %}
警告:我不再是SQL上的佼佼者了,所以完全有可能将一个额外的WHERE参数传递给select_related以仅加入该用户id的标签。不幸的是,今天早上我没时间,但我会检查你。