2011-07-07 25 views
4

我在理解如何迭代Django中的QuerySet,Tuple和Dictionarty时遇到了麻烦。QuerySet,元组,Django模板中的词典有什么区别

我很困惑这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') 

什么是retured在每个场景和最大的问题是我怎么能遍历过度。所有这些让我非常困惑。我研究文档,但他们告诉一件事,并不告诉如何在模板中使用。我知道它与python有关,但后来python没有模板来处理

回答

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 %} 

至于你的数据类型:
一个将是一个查询集或模型的对象列表
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

+0

谢谢哥们现在一切都得到了清理,被混淆tuplt,但现在它的确定 –

8

查询集:其处理SQL响应和返回表示结果的蟒构建一个Django类。尽管它在很多方面都像列表一样运行,但它实际上就是所谓的“可迭代”。它只是嘲笑一个列表的行为,让你可以像使用for循环一样使用它。

Tuple:一个不可变的列表。这意味着一旦设定,就不能改变。几乎在所有其他方面,它的行为就像一个列表。

词典:也被称为其他语言的散列。它可以被认为是“键控列表”。最严格意义上的“列表”是一组连续存储在内存中的项目。在过去的编程中,您必须“弹出”项目并将项目“推”到列表中,并且只能以FIFO或先入先出的方式进行检索。字典提供了一种在列表中“查找”项目的方法。它由键值对组成,因此您可以引用键并获取附加值。

现在的Django模板方面:

查询集:您遍历这些使用标准方法。一旦得到类似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 %}