2012-10-22 68 views
3

我有一個很大的水平表(30個字段),有很多外鍵(每個平均高達10個字段)。在Django管理器中顯示錶格時,我使用select進行優化並避免多重查詢。我正在尋找的是確保只有我的list_display條目被檢索,而不是所有的30個字段+(外鍵X 10)字段。目前在表上選擇*和在所有連接字段上運行選擇*。基本上,這是一種在Django管理員級別獲取「值」的方法。謝謝。Django管理更改列表優化查詢:選擇field1,field2而不是選擇*

編輯: 一個下面的例子:

class X(models.Model): 
    x1 = models.IntegerField # needed for admin display 
    x2 = models.TextField  # needed for admin display 
    x3 = models.ForeignKey(Y) 
    x4 = models.ForeignKey(Z) 
    ...      # X5 to x30 are not needed for admin display 
    X30 = models.Integerfield 

    @property 
    def y1(self) : 
     return self.x3.y1 

    @property 
    def y2(self): 
     return self.x4.z1 

class Y(models.Model): 
    y1 = models.IntegerField # needed for admin display 
    ... 
    y10 = models.IntegerField 


class Z(models.Model): 
    z1 = models.IntegerField # needed for admin display 
    ...      # z2 to z10 are not needed for admin display 
    z10 = models.IntegerField 


**admin.py** 
list_display = ['x1', 'x2', 'y1', 'z1'] 

我的問題是,當我看着生成的顯示此查詢,它做了選擇*在X(X1至X30),和使用select_related,它提取y1到y10和z1到z10,即使我不需要所有字段。

該表格大量用作CRM,並且由於生成的查詢速度較慢,因此該表格目前是showstopper。也有斑點和巨大的變化,它們不用於顯示,仍然被查詢。

謝謝。

+1

你是否在尋找: http://stackoverflow.com/questions/291945/how-do-i-filter-foreignkey-choices-in-a-django-modelform 或 http://stackoverflow.com/questions/1824267/limit-foreign-key-choices-in-select-in-an-inline-form-in-admin – Williams

+0

這是在查詢處理級別更多。 – tjazz

回答

0

請記住,在你list_display塊,你可以隨時更換x3_id到使用FK值,你手頭上已經有和所有沒有做任何額外的查找(溝select_related完全)。

然後,您可以將list_displaylist_display的自定義函數與here的自定義函數結合起來,以便將超鏈接的原始FK整數替換爲自己的管理頁面?