这里有几个不同的问题,但它们是混为一谈的。在
我知道类和实例之间有区别,但我似乎不知道如何访问后者而不是前者。在民意测验教程1中,他们做q=Question(Question廑text=“What's up?”?)然后用它做各种事情。但这很简单。此时,只有一个问题对象。当然,我不应该为表中的每一行创建变量,是吗?一定有更好的办法,但我找不到。例如:
for a in Articles:
print a.sections_set.order_by('id')
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: 'ModelBase' object is not iterable
以及
^{pr2}$我遇到了很多这样的类型错误,不是所有的都有“iterable”。我看到这个循环就像本地视频,所以我试着:
def __iter__(self):
for a in Articles:
print a.sections_set.order_by('id')
__iter__(Articles)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "<console>", line 2, in __iter__
TypeError: 'ModelBase' object is not iterable
我在这里的最终用例只是让部分按顺序显示。目前,它们出现在各自的文章下,这是正确的*,但顺序相反,我似乎也无法修复。我把
Sections.objects.order_by('id')
在我看来
我把
class meta:
ordering = ['id']
在我的剖面模型上。什么都不管用。在
(*)我也把
Articles.objects.order_by('id')
同样的观点,这几乎奏效了。除了第六条介于第一条和第二条之间之外,它确实把条款安排好了。我一次看了一个,发现了
Articles.objects.get(name='Article I')
<Articles: Article I>
A1 = Articles.objects.get(name='Article I')
A1.id
3
Articles.objects.get(name='Article II')
<Articles: Article II>
A2=Articles.objects.get(name='Article II')
A2.id
13
(我也不明白第二篇文章是如何一路跳到id=13的,因为我是同时按顺序把它们放进去的。)
A6=Articles.objects.get(name='Article VI')
A6.id
17
上次我查的时候,13是17岁之前。Python/Django对罗马数字有问题吗?如果是这样的话,那么为什么现在所有其他的顺序都是正确的呢?在
杀手:我的模板与基于相同视图代码的迭代完全没有问题:
{% for a in A %}
<h1><li><a href="{% url 'TOC' %}">{{ a.name }} {{ a.popular_name }}</a></li></h1>
{% for section in a.sections_set.all %}
<h2><li><a href="{% url 'TOC' %}">{{ section.name }} {{ section.popular_name }}</a></li></h2>
{% endfor %}
{% endfor %}
这段代码除了我上面描述的问题外没有其他问题。但是这个密码
{% for a in A %}
<h1><li><a href="{% url 'TOC' %}">{{ a.name }} {{ a.popular_name }}</a></li></h1>
{% for section in a.sections_set.order_by('id') %}
<h2><li><a href="{% url 'TOC' %}">{{ section.name }} {{ section.popular_name }}</a></li></h2>
{% endfor %}
{% endfor %}
引发模板语法错误:
Could not parse the remainder: '('id')' from 'a.sections_set.order_by('id')'
最后,在polls tutorial 3中,当他们引入render时,他们在没有解释的情况下更改代码中的顺序
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
到
def index(request):
latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
这将帮助我理解如何使用它,如果他们能a)保持一致,b)解释这样的变化。在
问题的第二部分似乎完全回答了第一部分:要遍历所有文章,可以使用}查询某个字段值。在
objects
管理器,即Article.objects.all()
返回所有文章,Article.objects.order_by('whatever')
修改顺序,或{对于第二部分,Django当然对罗马数字一无所知:事实上有些数字是有序的,这是一种巧合。您也不应该依赖主键
id
-进行排序:如果您删除并重新创建一个项目,您将获得更高的id,因为数据库通常不会重用id。您应该在模型上添加一个特定的order
字段,并按该字段排序。在最后,模板语言不允许使用参数调用函数,这就是为什么会出现这种错误。在
相关问题 更多 >
编程相关推荐