【发布时间】: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 发送到任何日志。这个 StackOverflow 帖子的底部响应似乎有一个方法,但是当我将这些行添加到 settings.py 并重新启动应用程序时,我的 SQL 查询仍然没有记录。
-
Opps,参考的帖子在这里:stackoverflow.com/questions/971667/…
-
您确定在更改代码后重新加载服务器吗?如果您显示完整的视图和模板,它可能会显示问题。
标签: mysql django django-views django-1.8 pythonanywhere