Django order_by()在PythonAnywhere上不适用于我

时间:2016-03-04 12:31:26

标签: mysql django django-views django-1.8 pythonanywhere

由于某种原因,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()有关,该类允许我使用MySQL Tiny Integer字段。但是,当我按照' id'或' school_type'该清单仍然保持在我看来相当随机的顺序中。

我可以放入我自己的循环,它在检索后对查询集进行排序,但我真的很想解决这个问题,所以我可以使用标准的Django方法来实现它。

我希望有人能够看到问题的来源。

1 个答案:

答案 0 :(得分:1)

我设法在这里的评论的帮助下解决了它。我尝试使用sys.write.stdout(str(school))将学校对象写入stdout。然后日志向我显示实际上数据正在被正确排序,因此问题必须与数据在被模板呈现之前的打包方式有关。

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