过滤链的任意深度

时间:2018-07-30 00:12:12

标签: python django

我想选择带有多个标签的文章;

url(r"^tagged/(?P<tags>[+]*\w+)$", views.tagged, name="tagged"),

请求的行为类似于“ article / tagged / python + django”

在views.py中,确定标签的长度并找到合格的文章

def tagged(request, tags):
    tags = tags.split("+")
    if len(tags) == 1:
        articles = Article.objects
                          .filter(tags__name=tags[0])

     if len(tags) == 2:
        articles = Article.objects
                          .filter(tags__name=tags[0])
                          .filter(tags__name=tags[1])
    if len(tags) == 3:
        articles = Article.objects
                          .filter(tags__name=tags[0])
                          .filter(tags__name=tags[1]) 
                          .filter(tags__name=tags[2])

    if ...

倍数看起来很笨拙,我该如何使用通用函数来处理标签的任意长度来解决问题。

1 个答案:

答案 0 :(得分:1)

您可以使用for循环来逐一应用标签:

def tagged(request, tags):
    tags = tags.split("+")
    articles = Article.objects.all()
    for tag in tags:
        articles = articles.filter(tags__name=tag)