2010-11-25 14 views
14

私はこのような何かを持っている:アクセスDjangoのモデルフィールドのラベルとhelp_textに

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にを表示したいと思います(つまり、 - ちょうどビューからアクセス)。 これはできますか?

答えて

30
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) 
+2

テンプレートのこれらのフィールドにアクセスすることはできません。 –

3

最初に開始するのはgetting the fieldsです。次に気にする属性を見てください。

+3

この**は、質問で要求された_テンプレート内で**動作しません。確かに、テンプレートのアンダースコア(_)で始まる名前のオブジェクト属性/メソッドまたはdictキーにアクセスすることはできません。これらの値をビューコンテキストに追加する必要があります。ビューコンテキストは、それをポーリングし、それほど便利ではありません。それほど便利ではないが、コンテキストを少なくする別のアプローチは、ここで見つけることができます:http://stackoverflow.com/questions/2170228/django-iterate-over-model-instance-field-names-and-values-in-テンプレート。基本的には、あなたのオブジェクトをフォームに入れて、尋ねられたことをすることができます。 – Cans

1

これを試してください。

model_instance.name.field.help_text 
+1

'AttributeError: 'unicode'オブジェクトに' model_instance.name.field'の属性 'field''がありません – frnhr

1

次のようにして、これを示すことができます。

>>> 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...' 
2

私は、これは知っています古いですが、テンプレートで使用できる完全な答えが必要です。

テンプレートでそれを使用する必要がある場合、好ましい方法は、など、これらの値を取得するモデルメソッド、追加することです:私たちはinstanceはテンプレートで、あなたのオブジェクトであるとしましょう、そして、

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') 

をこれはあなたのラベルです

また、これを行うためのテンプレートタグを作成することもできますが、モデルメソッドは明確であり、モデルは自己完結型のままです。図から

0

例:

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_textModelFormformによって参照される各モデルフィールドの場合:次に、テンプレートに

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はモデル内のフィールドです。

関連する問題