2012-12-25 23 views
0

Django admin docs表示可以將可調用的值指定爲可在list_display中使用的值。如果我需要通過函數參數傳遞一些額外的上下文給函數,那麼完成這個的最好方法是什麼?帶有函數的list_display,如何傳遞參數?

在僞代碼,我想要做的是一樣的東西:

應用房地產:

models.py:

class A(models.Model): 
    raw = models.TextField() 

admin.py:

from utils import processing 

list_display = [processing('realestate app result', True)] 

應用程序派對:

models.py:

class Person(models.Model): 
    raw = models.TextField() 

admin.py:

from utils import processing 

list_display = [processing('party app result', False)] 

utils.py:

def processing(obj, short_description, allow_tags=False): 
    def process(obj): 
     # do something 
     pass 
    process.short_description = short_description 
    process.allow_tags = allow_tags 

    return process(obj) 
+0

你不能以這種方式傳遞參數,單元格應該知道如何基於它所表示的模型呈現它自己。你需要傳遞什麼論據?描述你的情況,我們會看到你應該解決問題 – YardenST

+0

@YardenST編輯了這個問題,謝謝。 – Paolo

回答

3

不應指定內部的short_descriptionallow_tags功能本身。

定義的處理是這樣的:

utils.py:

def processing(obj): 
     #do something 
     pass 

每個的ModelAdmin類,這樣做:

class RealestateAdmin(...): 
    list_display = [processing,] 

    def processing(obj): 
     return utils.processing(obj) 
    processing.short_description = 'realestate app result' 
    processing.allow_tags = True 


class PartyAdmin(...): 
    list_display = [processing,] 

    def processing(obj): 
     return utils.processing(obj) 
    processing.short_description = 'party app result' 
    processing.allow_tags = False 

所以,你有一個地方(utils.py)其中包含了邏輯。 每個類都定義要在表中顯示的屬性。

+0

然後定義'process'函數不是必需的。 – Paolo

+1

@Guandalino是我的錯誤。我在編輯答案 – YardenST