如何在模板中访问此查询集中的元素?

时间:2013-03-29 11:12:27

标签: django templates distinct django-queryset

以下是查询集:

researches = Graph.objects.filter(subject=subject_object).exclude(type='infografik').values_list('name', flat=True).distinct()

当我这样做时:

{% for research in researches %}

在我的模板中,中间的代码会执行适当的次数,但例如{{ research.name }}不起作用。

如何访问对象的属性?

感谢。

编辑:

图表模型

name = models.CharField(max_length=100)
research = models.ForeignKey('Research')
explanation = models.TextField(max_length=1000)
path_to_file = models.CharField(max_length=100)
type = models.CharField(max_length=30, choices=type, null=True, blank=True)
subject = models.ManyToManyField(Subject)
thumbnail = models.ImageField(upload_to='thumbnails/', null=True, blank=True)
slug = models.SlugField(max_length=120, unique=True)

2 个答案:

答案 0 :(得分:3)

来自doc

  

每个元组包含传递给values_list()

的相应字段的值

所以打印研究名称就是这样做:

{% for research in researches %}
{{ research  }}
{% endfor %}

答案 1 :(得分:1)

因为您要求的是一个平面的值列表,所以没有要访问的属性。如果要访问所有属性,请使用此查询researches = Graph.objects.filter(subject=subject_object).exclude(type='infografik').distinct(),它将返回可以迭代的查询集或此researches = Graph.objects.filter(subject=subject_object).exclude(type='infografik').values().distinct(),这将返回一个dicts列表。在django的模板语言中,您可以像这样访问属性:

{% for research in researches %}
    {{ research.name }}
    {{ research.author }}
    ...
{% endfor %}

我知道的另一种方法是使用raw sql:

researches = Graph.objects.raw('SELECT * FROM appname_graph WHERE subject_id = %s AND type <> %s GROUP BY name', [subject_object.id, 'infografik'])