如何从Django查询集中检索值?

ipe*_*sus 5 python django

我想知道如何从名为“ my_movie_code_count”的变量中获取模板中的值:

my_movie_code_count = Code.objects.values('movie__title').annotate(Count('movie'))
Run Code Online (Sandbox Code Playgroud)

如果我对控制台进行了打印,则会得到:

for m in my_movie_code_count:
    pprint.pprint(m)
Run Code Online (Sandbox Code Playgroud)

控制台输出:

{'movie__count': 1, 'movie__title': u'THE MEN WHO STARE AT GOATS'}
{'movie__count': 3, 'movie__title': u'PIRATE RADIO'}
{'movie__count': 1, 'movie__title': u'A SERIOUS MAN'}
{'movie__count': 3, 'movie__title': u'GREENBERG'}
{'movie__count': 1, 'movie__title': u'MILK'}
{'movie__count': 1, 'movie__title': u'TEST'}
Run Code Online (Sandbox Code Playgroud)

模板:(当前不显示任何输出。)

    {% for movie in my_movie_code_count %}
    {{movie.title}}:{{movie.count}}
    {% endfor %}
Run Code Online (Sandbox Code Playgroud)

Has*_*sek 5

my_movie_code_count[0].movie__count 现在我知道这不是完全想要的,因此您可以在注释中添加名称:

my_movie_code_count = Code.objects.values('movie__title').annotate(num=Count('movie'))
print my_movie_code_count[0].num
1
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看文档:https : //docs.djangoproject.com/en/dev/ref/models/querysets/#annotate

它也没有显示任何内容,因为 django 在模板上静默失败(因此设计者不会破坏整个页面)。如果您检查属性,它们的名称是movie__titlemovie__count因此您必须将模板属性更改为:

{{ movie.movie__title }}: {{ movie.movie__count }}
Run Code Online (Sandbox Code Playgroud)