1

这是查询集:

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)
4

2 回答 2

3

文档

每个元组包含传递给 values_list() 的相应字段的值

所以要打印研究名称,只需:

{% for research in researches %}
{{ research  }}
{% endfor %}
于 2013-03-29T11:16:55.257 回答
1

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

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

我知道获得不同对象的唯一方法是使用原始 sql:

researches = Graph.objects.raw('SELECT * FROM appname_graph WHERE subject_id = %s AND type <> %s GROUP BY name', [subject_object.id, 'infografik'])
于 2013-03-29T11:28:38.653 回答