由于某种原因,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方法来实现它。
我希望有人能够看到问题的来源。
答案 0 :(得分:1)
我设法在这里的评论的帮助下解决了它。我尝试使用sys.write.stdout(str(school))将学校对象写入stdout。然后日志向我显示实际上数据正在被正确排序,因此问题必须与数据在被模板呈现之前的打包方式有关。
我在前一段时间之前写过这个视图,之前我决定要它排序,所以事实证明这个问题是由每个学校对象(带有附加的相关数据树)被读入字典引起的。一旦我将数据类型更改为列表,学校就会按照我的预期顺序进行渲染。