以下是查询集:
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)
答案 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'])