получить доступ к меткам полей модели django и help_text - PullRequest
22 голосов
/ 25 ноября 2010

У меня есть что-то вроде этого:

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 ]

36 голосов
/ 05 сентября 2012
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)
8 голосов
/ 08 июня 2017

Я знаю, что это старый, но он заслуживает полного ответа, который можно использовать в шаблонах.

Если вам нужно использовать его в шаблоне, предпочтительным методом является добавление методов модели, которые получают эти значения, например:

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 голосов
/ 26 ноября 2010

Попробуйте это.

model_instance.name.field.help_text
1 голос
/ 11 августа 2017

Пример из вида:

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

extract_model_field_meta_data извлекает help_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

Затемtemplate:

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

title - это поле в модели.

1 голос
/ 22 октября 2014

django-etc приложение имеет model_field_verbose_name и model_field_help_text теги шаблонов для доступа к данным, которые вы запрашивали из шаблонов: http://django -etc.rtfd.org / ru / latest / models .html # модель поля-шаблон-теги

0 голосов
/ 07 апреля 2012

Вы можете показать это следующим образом:

>>> 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...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...