ModelBase、instance、iteration和order\by

2024-04-18 12:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有几个不同的问题,但它们是混为一谈的。在

我知道类和实例之间有区别,但我似乎不知道如何访问后者而不是前者。在民意测验教程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)解释这样的变化。在


Tags: nameinidforgetbyobjects顺序
1条回答
网友
1楼 · 发布于 2024-04-18 12:33:01

问题的第二部分似乎完全回答了第一部分:要遍历所有文章,可以使用objects管理器,即Article.objects.all()返回所有文章,Article.objects.order_by('whatever')修改顺序,或{}查询某个字段值。在

对于第二部分,Django当然对罗马数字一无所知:事实上有些数字是有序的,这是一种巧合。您也不应该依赖主键id-进行排序:如果您删除并重新创建一个项目,您将获得更高的id,因为数据库通常不会重用id。您应该在模型上添加一个特定的order字段,并按该字段排序。在

最后,模板语言不允许使用参数调用函数,这就是为什么会出现这种错误。在

相关问题 更多 >