我想列出Django-Taggit中的所有标签,只要它们在一个对象中使用,并且只在它们属于特定模型时才会使用。例如;我有一个列出部件的页面和一个列出工具的页面。我正在标记所有内容,但在我的主页上,我想在不同的列中显示工具标签和部件标签。
下面的代码将显示所有标签,甚至是未使用的标签以及所有型号的标签。下面的代码是我目前使用的代码,我知道它为什么这样做,但我不知道如何过滤掉exit
对象有一个标记,if
它属于工具或部分模型,这就是为什么我有一个工具if
循环包装它,但这似乎是错误的。谢谢你的帮助。
查看
for
模板
def main_index(request):
tools = Tool.objects.prefetch_related('uploads').all().order_by('title')
tags = Tag.objects.all()
return render(request, 'main/index.html', {'tools': tools, 'tags': tags})
答案 0 :(得分:0)
摆弄它并拉出我的头发;我能够迭代我的查询集,然后使用distinct()过滤掉标记名称。我的新代码如下 - 这似乎是一种干净的工作方式,我可以找到它的其他用途。感谢您抽出宝贵时间尝试帮助。
<强>视图强>
def main_index(request, tag_slug=None):
tools = Tool.objects.prefetch_related('uploads').distinct('tags')
parts = Part.objects.prefetch_related('uploads').distinct('tags')
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
tools = Tool.objects.filter(tags__in=[tag])
parts = Part.objects.filter(tags__in=[tag])
return render(request, 'main/index.html', {'tools': tools, 'parts': parts, 'tag': tag})
<强>模板强>
{% for t in tools %}
{% for tag in t.tags.all %}
<div class="col-md-3 col-sm-6">
<div class="c-content-feature-2" data-wow-delay1="1s" data-height="height">
<h5 class="c-font-uppercase c-center"><a href="{% url "products:tool_list_by_tag" tag.slug %}">{{ tag.name }}</a></h5>
</div>
</div>
{% if not forloop.last %} {% endif %}
{% endfor %}
{% endfor %}