[英]Compare Django-taggit tags from multiple queries and list objects from matching tags
我有一个出售零件和工具的网站。 该站点最初是用单独的工具模型和这些工具的文档构建的。 文档只是在文档页面上迭代,并从工具页面链接到。 我们使用Django-taggit标记所有内容,但我已将自己标记在角落:)
我需要在工具详细信息页面而不是单独的文档页面上列出属于特定工具的文档。
问题是与该工具的文档没有任何关系,因此我试图查询该工具上的标签以及该文档上的标签以及与该工具具有相同标签的任何文档,都将在页面上列出。
以下是我到目前为止提出的内容,它在某种意义上与标签匹配,但是它会复制每个文档。 例如,如果我在工具和文档上都具有标签名“一个”和“两个”,它将列出所有匹配的文档乘以匹配的标签数。 我希望这是有道理的。我还提供了一个截图以显示示例。 我知道为什么我的代码是重复的,但是我的Python印章不够熟练,无法编写解决它的代码(我也知道这可以写得更干-这是我的下一个挑战)。 谢谢您的帮助。
视图
def tool_detail(request, tool):
contact_form(ContactForm, request)
tags = Tool.tags.all()
tool = get_object_or_404(Tool, slug=tool)
uploads = tool.uploads.all()
doc = Document.objects.all()
return render(request, 'products/tool_detail.html', {'tool': tool, 'tags': tags, 'doc': doc, 'form': ContactForm, 'uploads': uploads})
模板
...
<tbody>
{% for d in doc %}
{% for tag in tool.tags.all %}
{% if tag.name in d.tags.get.name %}
<tr>
<td>{{ d.title }}</td>
<td style="text-align: center;"><a href="{{ d.file.url }}"><i class="fa fa-cloud-download"></i></a></td>
</tr>
{% endif %}
{% endfor %}
{% endfor %}
</tbody>
...
首先,将业务逻辑放在模板中是一种不好的做法-应该在视图中完成。 话虽如此,关于您的问题。 首先-视图(请参见代码中的注释):
def tool_detail(request, tool):
contact_form(ContactForm, request)
tags = Tool.tags.all()
tool = get_object_or_404(Tool, slug=tool)
uploads = tool.uploads.all()
# filter the documents to find the ones that have identical tags,
# add .distinct() to filter out duplicate documents
doc = Document.objects.filter(tags__in=tool.tags.all()).distinct()
return render(request, 'products/tool_detail.html', {'tool': tool, 'tags': tags, 'doc': doc, 'form': ContactForm, 'uploads': uploads})
形式就是:
...
<tbody>
{% for d in doc %}
<tr>
<td>{{ d.title }}</td>
<td style="text-align: center;"><a href="{{ d.file.url }}"><i class="fa fa-cloud-download"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
...
在文档中阅读有关过滤和字段查找的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.