2016-03-04 58 views
2

出於某種原因ORDER_BY()是不是爲我工作在一個查詢集。我嘗試了所有我能想到的,但是我的Django/MySQL安裝似乎沒有對order_by()方法做任何事情。該列表似乎只是保持在一個相當無序的狀態,或者是以某種我無法看到的方式訂購的。Django的ORDER_BY()是不是爲我工作在PythonAnywhere

我的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

如果'DEBUG = True',則應該記錄您的查詢。你可以顯示來自'django.db.connection.queries'的記錄查詢嗎? – knbk

+1

這似乎不太可能,order_by不起作用。數據庫中的字段更有可能具有與您預期不同的值,或者您沒有運行您認爲正在運行的代碼。 – Glenn

+0

我在管理員中更改訂單欄中的值。剛剛重新檢查他們,我可以向你保證他們是正確的。另外,如果我將視圖更改爲.filter(id = 1),則只有一個項目出現在列表中,所以它絕對是我正在處理的正確代碼。 至於伐木。 Debug = True在設置文件中設置,但我沒有收到任何SQL發送到任何日誌。這個StackOverflow帖子的底部響應似乎有一個方法,但是當我將這些行添加到settings.py並重新啓動應用程序時,我的SQL查詢仍未記錄。 –

回答

1

我設法從這裏評論一些幫助解決它。我嘗試使用sys.write.stdout(str(school))將學校對象寫入stdout。然後日誌告訴我,實際上數據的排序是正確的,所以問題必須與數據在被模板呈現之前如何打包。

我寫的看法,前一段時間之前,我決定,我想它下令,讓原來的問題是由每個學校的對象(以及相關數據的連接樹)造成被讀入字典。一旦我將數據類型更改爲列表,學校將按照我的預定順序進行渲染。