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)

我会感谢每一个有助于解决这个问题的提示。

问候康拉德

4

2 回答 2

1

尝试verbose_name为 ManytoManyfield 指定参数

family = models.ManyToManyField('family',verbose_name=u'trampampam', related_name="family", null=True, blank=True)
于 2013-04-13T23:27:33.300 回答
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 %}

你还必须创建过滤器

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)

* 我猜,这是不同的类型;检查一下

于 2013-04-13T23:32:23.383 回答