2011-09-06 115 views
1

我繼承了一個提供高中體育信息的Django應用程序。__in過濾器不起作用

teams = Team.objects.filter(season__school_year__in=school_year_filter_list) 

school_year_filter_list包含[1,3]

此查詢導致一個錯誤:所以從當前季節,我完成這種方式僅顯示信息我最近收到修改一組特定的數據的請求pgpool(Postgres數據庫池/複製實用程序),所以我不能使用它。作爲一個方面說明,查詢在Python shell中正常工作,並且繞過pgpool並直接使用Postgres。但是,我們的網絡體系結構決定使用pgpool,因此我試圖找到一種替代方法來檢索相同的數據。

你能幫助我確定另一種方法來獲得當前SchoolYear中所有球隊的一個賽季嗎?

(簡化)模型是這樣的:

class Team(models.Model): 
    season = models.ForeignKey(Season) 

class Season(models.Model): 
    school_year = models.ForeignKey(SchoolYear, blank=True, null=True) 

class SchoolYear(models.Model): 
    school_year = models.CharField(max_length=150) 

的 '_schoolyear' 表如下所示:

id | school_year 
----+------------- 
    1 | 2010-2011 
    2 | 2009-2010 
    3 | 2011-2012 
+1

這樣一個基本的查詢應該不會導致出現問題,無論使用的數據庫的。此外,如果它是一個真正的bug,它應該被正確識別,以便可以在Django代碼中進行說明。如果您提供了查找引起的錯誤的詳細信息,那將非常有用。我不禁想象'__in'查找會在某個時候再次出現,或者你最終不得不想出一些甚至不應該成爲問題的奇怪修復。 –

+1

@Jordan Reiter:謝謝您的反饋。我們在應用程序的其他地方使用'__in'查找沒有問題。這個問題只存在於這個特定的查詢中,並且只與特定版本的pgpool(3.0.3,3.0.4)一起存在。我們將在以後開發並提交適當的錯誤報告,但現在,找到一個解決方法是一個更高的優先級。 –

回答

1

最後,我修改了另一個模型來完成這項工作。而不是解析年來獲得活躍的季節,我添加了一個「活躍」標誌學年模型和改進我的查詢以檢查標誌:

def queryset(self, request): 
    qs = super(PlayerYearAdmin, self).queryset(request) 
    return qs.filter(team__season__school_year__active=True) 
0

你試過
teams = Team.objects.filter(season__school_year__id__in=school_year_filter_list)school_year_filter_list是學年ID的列表是不是正確?

+0

'school_year_filter_list'是學校年份ID列表。這是我的理解,「__id」不是必需的,但我嘗試按照您的建議的方式過濾器,收到相同的結果。 –

0

小記:我看到 'Django的管理' 標籤,所以我認爲你=添加season__school_year_ [1,2] URL查詢字符串如/管理/體育/團隊/季節 _school_year__in = [1? ,2]是否正確?

如果是這樣,你舒爾是school_year_filter_list包含列表[1,3],但不包含列表'[1,3]'

您能否向我們提供有關錯誤pgpool數據或者Django的ORM返回repr一個字符串?

+0

感謝您的回覆。查詢過濾器在admin.py中被硬編碼,並且不通過URL提供。 'school_year_filter_list'絕對是一個列表,而不是一個字符串。 pgpool錯誤很簡單:'psycopg2。InterfaceError:連接已經關閉'經過廣泛的測試後,我們確定這是Django與pgpool進行通信的一種錯誤,可能是驅動程序問題。 –