2013-03-29 41 views
0

這是一個簡單的例子來說明我的觀點返回2個值的Django模型方法

class A(models.Model): 
    boolean_field=models.BooleanField(default=False) 
    name = models.CharField(max_length=50, blank=True) 
    some_other_field = models.CharField(max_length=10) 

    def true_value(self): 
    if self.boolean_field: 
     return self.name 
    else: 
     return '' 

    def false_value(self): 
    if not self.boolean_field: 
     return self.name 
    else: 
     return '' 

admin.py

class Aadmin(admin.ModelAdmin): 
    list_display = ('true_value', 'some_other_field', 'false_value') 

我覺得數據庫被擊中兩次,在上面的例子。有什麼方法可以一次獲取值並在list_display中使用它。有沒有什麼辦法來優化這個要求。

感謝

+0

http://stackoverflow.com/questions/7276509/django-admin-show-aggregate-values-from-related-model – iMom0

+0

不成熟的優化是所有邪惡的根源。不要猜測,簡介。 –

+1

你爲什麼會認爲數據庫被擊中兩次?這是不正確的。 –

回答

0

,我在我的評論提出的觀點值得進一步解釋,因爲很明顯,你有關於Django的模型層的工作方式相當大的誤解。

一旦Django從數據庫中取出一個對象,隨後對該對象中不同屬性的調用不會觸發額外的數據庫調用。除非您另有特別要求,否則模型的所有屬性都會同時獲取並存儲在模型實例中。 (如果屬性是外鍵,唯一的情況是發生額外通話,但即使在那裏也可以避免使用select_related。)

事實上,甚至不會有每個對象會有一個呼叫的情況,因爲Django只需一次調用即可獲取頁面上的所有行。

+0

我同意,我不精通django的細微差別,但這並不意味着誤解。並感謝您消除這種對優化的理解。 – user1572215