2012-04-05 50 views
4

我編了一個模板來顯示所有從模型中的字段和值的顯示顯示值,它看起來像這樣:的Django的DetailView模板的所有領域

## detail_template.html ## 
{% for name, value in object.get_fields %} 
    <p> 
     <label>{% trans name %}:</label> 
     <span>{{ value|default:"Not available" }}</span> 
    </p> 
{% endfor %} 

在課堂上,你可以看到聲明的get_fields功能:

## models.py ## 
Class Object: 
    ...many fields... 

    def get_fields(self): 
     return [(field.verbose_name, field._get_val_from_obj(self)) for field in self.__class__._meta.fields] 

的問題是,當我有,例如CharField與選擇,如:

## models.py ## 
GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
) 
     ...all other fields ... 
    sex = models.CharField(verbose_name=u"Sex", max_length=1, choices=GENDER_CHOICES) 

它顯示的M或F,我想要做的是加載所有領域的get_NAMEFIELD_display而無需手動做的所有領域:

<p> 
    <label>{% trans 'Sex' %}:</label> 
    <span>{{ object.get_sex_display|default:"Not available" }}</span> 
</p> 

我有一個線索:Django的管理員的Contrib這是否上市對象時,所以我肯定有一個通用的方式做到這一點,我也很感激任何幫助。

回答

0

我認爲你應該添加另一種方法:

def get_field_value(self, field): 
    try: 
     return self._get_FIELD_display(field) 
    except something: 
     return field._get_val_from_obj(self) 

而在你的發電機使用。

+0

我看,我試過..它調用所有的get_field_displays,但現在所有其他沒有該函數的字段沒有返回get_val_from_obj =( 我需要知道它給出的異常時沒有get_field_display – StaticX 2012-04-06 15:24:42

+0

運行Python外殼,檢索對象,並嘗試調用'obj._get_FIELD_display(「some_non_existent_field」)' - 你會得到異常 – ilvar 2012-04-07 00:04:33

+0

沒有必要添加其他方法,它提出了也不例外。如果你打電話。 self._get_FIELD_display(場)如果返回即使沒有get_field_display方法的值=) – StaticX 2012-04-07 17:06:58