我无法理解如何在django中迭代QuerySet,Tuple和Dictionarty。
我很困惑哪些djnago函数返回像objects.all或objects.get
这样的函数假设我有
a = model.objects.all()
b = model.object.get(pk=1)
c = Blog.objects.values('name', 'entry__headline')
d = Entry.objects.values_list('id', 'headline')
e = Person.objects.raw('SELECT * FROM myapp_person')
每个场景中的回归是什么,最大的问题是我如何迭代。 所有这些让我非常困惑。我研究文档,但他们告诉一件事,不告诉如何在模板中使用。我知道它与python有关,但是python没有模板来处理
答案 0 :(得分:10)
QuerySet :一个Django类,它处理SQL响应并返回表示结果的python结构。虽然它在很多方面都像列表一样运行,但它实际上就是所谓的“可迭代”。它只是嘲笑列表的行为,允许你在其上使用for-loops之类的东西。
元组:不可变列表。这意味着一旦设定,就无法改变。在几乎所有其他方式中,它的行为就像列表一样。
字典:也称为其他语言的哈希。它可以被认为是“键控列表”。最严格意义上的“列表”是串行存储在存储器中的一组项目。在编程的旧时代,您必须关闭“弹出”项目并将项目“推送”到列表中,并且它们只能以FIFO或先进先出的方式检索。字典提供了一种在列表中“查找”项目的方法。它由键值对组成,因此您可以引用键并获取附加值。
现在就Django模板而言:
QuerySets :您使用标准方法迭代这些。获得MyModel.objects.all()
之类的结果后,您可以使用{% for value in queryset %}
代码。
元组:就迭代而言,这些行为与标准列表完全相同。您也可以只使用{% for value in tuple %}
标记。唯一可能的挂起是有时候你最终会得到元组元组或元组列表。这些就像多级列表一样。你必须迭代外部列表或元组,然后迭代内部列表。
字典:这些可能是最复杂的,只是因为它们需要方法调用来获取可迭代对象。
mydict.iteritems() # returns an iterable consisting of `(key, value)` tuples.
mydict.iterkeys() # returns an iterable consisting of the keys. You can then use mydict[key] to get the values
mydict.itervalues() # returns an iterable consisting of the values.
最后一种方法可能是Django模板中最好的简单迭代:
{% for value in mydict.itervalues %}
答案 1 :(得分:4)
您指的是这些文档吗? https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for
我认为这就是你要找的东西。
基本上你会像:
一样迭代它们{% for item in a %}
{{item.field}}
{{item.field2}}
{% endfor %}
{{b.field}}
{% for item in c %}
{{item.name}}
{{item.entry__headline}}
{% endfor %}
{% for item in d %}
{{item}}
{% endfor %}
# Also you can do this if you want to access just a particular index:
{{d.0}}
{{d.1}}
{% for item in e %}
{{item.field}}
{{item.field2}}
{% endfor %}
至于您的数据类型:
a将是QuerySet或模型对象列表
b将是模型对象
c将是一个ValuesQuerySet或一个字典列表
d也是一个ValuesQuerySet,但它实际上是一个元组列表
e将是一个RawQuerySet,其行为类似于普通的QuerySet
来源:
https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values
https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list