Django order_by() 在 PythonAnywhere 上不适合我

Posted

技术标签:

【中文标题】Django order_by() 在 PythonAnywhere 上不适合我【英文标题】:Django order_by() is not working for me on PythonAnywhere 【发布时间】:2016-06-18 04:39:48 【问题描述】:

由于某种原因 order_by() 在查询集上对我不起作用。我已经尝试了我能想到的一切,但我的 Django/mysql 安装似乎没有使用 order_by() 方法做任何事情。该列表似乎只是处于相当无序的状态,或者是在我看不到的某些基础上排序的。

我的 Django 安装是 1.8。

我的一个模型示例如下:

class PositiveTinyIntegerField(models.PositiveSmallIntegerField):
    def db_type(self, connection):
        if connection.settings_dict['ENGINE'] == 'django.db.backends.mysql':
            return "tinyint unsigned"
        else:
            return super(PositiveTinyIntegerField, self).db_type(connection)

class School(models.Model):
    school_type = models.CharField(max_length=40)
    order = PositiveTinyIntegerField(default=1)

# Make the identity of db rows clear in admin
def __str__(self):
    return self.school_type

这是我认为的相关行:

schools = School.objects.order_by('order')

起初我认为问题与使用了非标准 PositiveTinyIntegerField() 有关,该非标准 PositiveTinyIntegerField() 由我在某个网站上找到的某个类定义,该类允许我使用 MySQL Tiny Integer 字段。但是,当我按“id”或“school_type”排序时,列表仍然保持在我看来相当随机的顺序。

我可以放入我自己的循环,在查询集被检索后对其进行排序,但我真的更愿意解决这个问题,这样我就可以使用标准的 Django 方法。

希望有人能看出问题出在哪里。

【问题讨论】:

如果DEBUG = True,您的查询应该被记录。你能显示来自django.db.connection.queries 的记录查询吗? order_by 似乎不太可能不起作用。更有可能是数据库中的字段具有与您预期不同的值,或者您没有运行您认为正在运行的代码。 我自己在管理员中更改了订单列上的值。刚刚重新检查过它们,我可以向你保证它们是正确的。此外,如果我将视图更改为 .filter(id=1),列表中只会出现一项,所以这绝对是我正在处理的正确代码。至于日志记录。 Debug=True 在设置文件中设置,但我没有将任何 SQL 发送到任何日志。这个 *** 帖子的底部响应似乎有一个方法,但是当我将这些行添加到 settings.py 并重新启动应用程序时,我的 SQL 查询仍然没有记录。 Opps,参考的帖子在这里:***.com/questions/971667/… 您确定在更改代码后重新加载服务器吗?如果您显示完整的视图和模板,它可能会显示问题。 【参考方案1】:

在 cmets 的帮助下,我设法解决了这个问题。我尝试使用 sys.write.stdout(str(school)) 将学校对象写入标准输出。然后,日志向我显示,事实上数据的排序是正确的,所以问题必须在于数据在被模板呈现之前是如何打包的。

我前段时间写了这个视图,然后才决定要对其进行排序,所以结果证明问题是由每个学校对象(带有相关数据的附加树)被读入字典引起的。一旦我将数据类型更改为列表,学校就会按照我的预期顺序呈现。

【讨论】:

以上是关于Django order_by() 在 PythonAnywhere 上不适合我的主要内容,如果未能解决你的问题,请参考以下文章

Django order_by() 在 PythonAnywhere 上不适合我

080:Django数据库QuerySet API详解-order_by:

如何在 django 中包含条件 order_by?

DJANGO:如何使用包含 order_by 的模型创建管理视图?

Django order_by 具体顺序

Django告诉双重排序中具有特定属性的最后一项(order_by)