遍历Django列表并仅显示唯一的DjangoTaggit标记

2024-05-05 19:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想列出Django Taggit中的所有标记,仅当它们在对象中使用时,并且仅当它们与特定模型相关时。例如,我有一个列出部件的页面和一个列出工具的页面。我正在标记所有内容,但在我的主页上,我希望在单独的列中显示工具标记和零件标记。在

下面的代码将显示所有标记,甚至是未使用的和来自所有模型的标记。下面的代码是我目前正在使用的代码,我知道它为什么要这样做,但是我不确定如何过滤掉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})

模板

^{pr2}$

Tags: 工具对象代码标记模型indexifobjects
1条回答
网友
1楼 · 发布于 2024-05-05 19:27:43

在摆弄了它并拔出我的头发之后,我可以迭代查询集,然后使用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})

模板

^{pr2}$

相关问题 更多 >