0

我嘗試在模板中顯示模型中字段的名稱。 這適用於除ManyToManyField以外的任何類型的字段。在模板中顯示多對多關係的名稱

我在我的models.py中使用這個函數來返回所有的字段。

def get_all_fields(self): 
    """Returns a list of all field names on the instance.""" 
    fields = [] 

    # only display fields with values and skip some fields entirely 
     if f.editable and value and f.name not in ('id','lastname','firstname') : 
      fields.append(
       { 
       'label':f.verbose_name, 
       'name':f.name, 
       'value':value, 
       }) 
    return fields 

在我的模板我用這個循環來顯示所有字段:

{% for f in modelname.get_all_fields %} 
<td>{{f.label|capfirst}}</td><td>{{f.value|escape|urlize|linebreaks}}</td> 
{% endfor %} 

正如前面提到的,這個工作正常,除了ManyToManyFields各個領域。 例如我的M2M關係的一個看起來是這樣的:

family = models.ManyToManyField('family', related_name="family", null=True, blank=True) 

我很感謝這有助於解決這個每個提示。

問候 康拉德

回答

0

嘗試指定verbose_name論據ManytoManyfield

family = models.ManyToManyField('family',verbose_name=u'trampampam', related_name="family", null=True, blank=True) 
+0

什麼都沒有發生。 – Conrad

0

你寫{{f.value|escape|urlize|linebreaks}},其中顯示字段的值。然而,M2M關係的值是一組對象實例,你需要在設置一次迭代(如果這是你想要的結果):

{% load m2m_filter %} 

{% for f in modelname.get_all_fields %} 
    <td>{{f.label|capfirst}}</td> 
    <td> 
    {% if f.value|is_m2m %}   
     {% for object in f.value.objects.all %} 
     {{ object|escape|urlize|linebreaks }} 
     {% endfor %} 
    {% else %} 
     {{f.value|escape|urlize|linebreaks}} 
    {% endif %} 
    </td> 
{% endfor %} 

,你也必須創建filter

m2m_filter.py

from django import template 
from django.db import models 

register = template.Library() 

def is_m2m(value): 
    return type(value) == models.ManyToManyField * 

register.filter('is_m2m', is_m2m) 

*我想,這是一個不同的類型;只是檢查

+0

我嘗試使用過濾器時出現錯誤。 無效的過濾器:'is_m2m' – Conrad

+0

更具體地說,我嘗試檢查是否存在不同的字段。 '%如果f.label == 'berufsschule' %}​​{{f.label | capfirst}}​​{{f.value|escape|urlize|linebreaks}} {%其他%}​​{{f.label | capfirst}}​​{{f.value | escape | urlize | linebreaks}}' – Conrad

+0

這不適用於M2M字段。 – Conrad