访问django模型字段标签和help_text

时间:2010-11-25 18:23:28

标签: django

我有这样的事情:

class ContactData(models.Model):
    name  = models.CharField(max_length=300, verbose_name=u"Name", help_text=u"Please enter your name...",null=True, blank=False)
    phone = models.CharField(max_length=300, verbose_name=u"Phone number", null=True, blank=False)

我想在模板中显示字段的标签和help_text(即 - 只是从视图中访问它)。 可以这样做吗?

6 个答案:

答案 0 :(得分:36)

unicode(ContactData._meta.get_field('name').verbose_name)
unicode(ContactData._meta.get_field('name').help_text)

unicode(ContactData._meta.get_field('phone').verbose_name)
unicode(ContactData._meta.get_field('phone').help_text)

答案 1 :(得分:8)

我知道这是旧的,但它应该得到一个可以在模板中使用的完整答案。

如果需要在模板中使用它,首选方法是添加获取这些值的模型方法,例如:

from django.db import models
from six import text_type

class ContactData(models.Model):
    name  = models.CharField(max_length=300, verbose_name=u"Name", help_text=u"Please enter your name...",null=True, blank=False)
    phone = models.CharField(max_length=300, verbose_name=u"Phone number", null=True, blank=False)

    def __get_label(self, field):
        return text_type(self._meta.get_field(field).verbose_name)

    def __get_help_text(self, field)
        return text_type(self._meta.get_field(field).help_text)

    @property
    def name_label(self):
        return self.__get_label('name')

    @property
    def name_help_text(self):
        return self.__get_help_text('name')

    @property
    def phone_label(self):
        return self.__get_label('phone')

    @property
    def phone_help_text(self):
        return self.__get_help_text('phone')

然后,让我们说instance是您在模板中的对象,这是您的标签

<label for="id_phone">{{ instance.phone_label }}</label>
<div id="id_phone">{{ instance.phone }}</div>

或者,你可以创建一个模板标签来做到这一点,但模型方法更清晰,并保持模型自包含。

答案 2 :(得分:2)

试试这个。

model_instance.name.field.help_text

答案 3 :(得分:1)

django-etc应用有model_field_verbose_namemodel_field_help_text个模板标记来访问您从模板中提问的数据:http://django-etc.rtfd.org/en/latest/models.html#model-field-template-tags

答案 4 :(得分:1)

视图中的示例:

return render(
    request,
    'projects/create_edit_project.html',
    {
        'form': form,
        'model_field_meta_data': 
            extract_model_field_meta_data(form),
    }
)

extract_model_field_meta_datahelp_text ModelForm引用的每个模型字段提取form

def extract_model_field_meta_data(form):
    """ Extract meta-data from the data model fields the form is handling. """
    meta_data = dict()
    for field_name, field_data in form.base_fields.items():
        meta_data[field_name] = {
            'help_text': getattr(field_data, 'help_text', '')
        }
    return meta_data

然后在模板中:

<p class="help-block">{{ model_field_meta_data.title.help_text }}</p>

title是模型中的一个字段。

答案 5 :(得分:0)

您可以按如下方式显示:

>>> ContactData._meta.fields
[<django.db.models.fields.AutoField: id>,
 <django.db.models.fields.CharField: name>,
 <django.db.models.fields.CharField: phone>]
>>> ContactData._meta.fields[1].help_text
u'Please enter your name...'