Djangoの日本向けウィジェットを使う

2007/03/30 19:24

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

ウィジェットと、国際化文字列の双方が svnに 取り込まれたので、紹介します。

localflavorはdjango.contrib.localflavorパッケージに含まれるもので、Djangoのi18n/l10nに対する取り組みの積極さを表しているとおもいます(adminもアラビア語等右から記述する言語に対応しています)。

私の作成したパッチの不備から、先日リリースされた0.96というバージョンには含まれておりません。

まずは、どのようなものなのかのスクリーンショットを見てください。

localflavor-1 localflavor-2

サンプルは、ユーザ(django.contrib.auto.models.User)に対して、送付先住所を設定するという簡単なものです。

頻出するであろう「郵便番号の入力チェック」と「都道府県の選択・入力チェック」の再発明せずに済むようになりました。

モデルのコートは通常と変わらないので、非常に単純です。

  from django.db import models
  from django.utils.translation import gettext as _
  from django.contrib.auth.models import User

  # Create your models here.
  class SendTo(models.Model):
      zip_code = models.CharField(_('Zip Code'), maxlength=8)
      prefecture = models.CharField(_('Prefecture'), maxlength=9)
      street   = models.TextField(_('Street Address and Building'))
      user = models.ForeignKey(User, verbose_name=_('User'))

      def get_absolute_url(self):
          return '/flavor/add/'

次に、viewsを見てみます。

  from django import newforms as forms
  from django.http import HttpResponse, HttpResponseRedirect
  from django.template import loader, Context

  from django.contrib.localflavor.jp import forms as jp_forms
  from flavor.sample.models import SendTo

  #customize form
  SendToForm = forms.form_for_model(SendTo)

  SendToForm.base_fields['zip_code'] = jp_forms.JPPostalCodeField()
  SendToForm.base_fields['prefecture'].widget = jp_forms.JPPrefectureSelect()

  def add_send_to(request):
      if request.method == 'POST':
          form = SendToForm(request.POST)
          if form.is_valid() :
              send_to = form.save()
              return HttpResponseRedirect(send_to.get_absolute_url())
      else:
          form = SendToForm()

      t = loader.get_template('sample/sendto_form.html')
      c = Context({'form': form,})
      return HttpResponse(t.render(c))

使い方

郵便番号フィールドは、7桁の郵便番号(ハイフンありでも無しでも可)を受けて、ハイフン無しの7桁を返します。

デフォルトのウィジェットやフィールド(モデル用ではなくフォーム用のもの)がmodelに定義できて欲しいところです。modelのフィールド属性には、オールドフォームズのウィジェット設定がありますので、きっと近い将来設定できるようになるに違いない…。

Prev Entry

Next Entry