[Django] テンプレート内でDBのカラムサイズを取得する方法

ModelFormを使ったフォームを表示させるテンプレート内で、Modelの各フィールドに設定した「max_length」を表示させる方法です。今までは定数クラスを用意し、それをModelとテンプレート内で使うというやり方をしていたのですが、もっと簡単にアクセスできることがわかりました。

やり方は単純で、テンプレート内で

{{ 「ModelFormのインスタンス」.field.「サイズを取得したいフィールド名」.max_length }}

と書くだけです。例えば以下のようなテンプレートをあったとします。

{% load markup %}
<html>
  <head>
    <title>Form</title>
    <link rel="stylesheet" href="{{ STATIC_URL }}css/style.css" />
  </head>
  <body>
    <form method="post">
      {% if form.non_field_errors %}
      <div class="field_wrapper">
        {{ form.non_field_errors }}
      </div>
      {% endif %}
      <div class="field_wrapper">
        <p>名前: (最大{{ form.fields.name.max_length }}文字)</p>
        {{ form.name.errors }}
        {{ form.name }}
      </div>
      <div class="field_wrapper">
        <p>スラッグ:(最大{{ form.fields.slug.max_length }}文字) </p>
        {{ form.slug.errors }}
        {{ form.slug }}
      </div>
      <div class="button_wrapper">
        <button type="submit">新規登録</button>
      </div>
    </form>
  </body>
</html>

これをブラウザで開くと、以下のような画面が表示されます。
カラムのサイズを表示することができる

最後に、このサンプルの「models.py」・「forms.py」・「views.py」を載せておきます。

models.py

# -*- coding: utf-8 -*-

from django.db import models


class MaxLength(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField()

forms.py

# -*- coding: utf-8 -*-

from django import forms
from myapp.models import MaxLength


class MaxLengthForm(forms.ModelForm):
    class Meta:
        model = MaxLength

views.py

# -*- coding: utf-8 -*-

from django.shortcuts import render_to_response
from django.template import RequestContext
from myapp.forms import MaxLengthForm

def index(request):
    form = MaxLengthForm()
    return render_to_response('form.html', dict(form=form), context_instance=RequestContext(request))

この記事が役に立った場合、シェアしていただけると励みになります!!