-
- Page 2
Itemモデル一覧のカスタマイズ
次に商品の一覧表示で商品コード以外にも、商品名、価格が表示されるようにカスタマイズしてみましょう。Djangoに用意されている一覧表示のデフォルト表示は、商品コード(item_code)だけが表示されています。これはモデルのUnicode 表記(Itemモデルの)が呼び出され表示されているものです。
class Item(models.Model):
item_code = models.CharField(u'商品コード',max_length=256,unique=True)
~省略
def __unicode__(self):
return self.item_code
管理インターフェイス上のモデル操作をカスタマイズするには、アプリケーションフォルダのadmin.pyに ModelAdmin(django.contrib.admin)を継承したクラスを作成し、そこにカスタマイズ内容を定義します。ここでは ModelAdminを継承したItemAdminクラスを作成します。一覧表示に表示したい項目を指定するには、list_display属性に Pythonのタプル形式でモデルのフィールド名(item_code、item_name、price)を定義します。クラスを定義後、admin.site.registerメソッドの引数に、ItemAdminも渡すように修正します。リスト6に修正後のadmin.pyを示します。
# -*- coding: utf-8 -*-
from django.contrib import admin
from ecsite.itempage.models import Item
class ItemAdmin(admin.ModelAdmin):
list_display = ('item_code', 'item_name','price') # 一覧表示したいフィールドを設定
admin.site.register(Item,ItemAdmin) #ItemAdminクラスも追加
admin.pyに定義したら開発サーバを再起動し、Itemモデルの一覧表示画面を表示してみましょう。図6のように商品コード(item_code)、商品名(item_name)、価格(price)が表示されます。
Django の管理インターフェイスをカスタマイズするには、今回紹介したようにadmin.pyファイルにカスタマイズ内容を定義していきます。今回紹介した以外にも、さまざまなカスタマイズが提供されていて柔軟にカスタマイズできることが管理インターフェイスの特徴です。それらの方法についてはDjango本家サイトのドキュメントを参照してください。
Django の管理インターフェイスのうまくカスタマイズした事例としてはReview Boardがあげられます。Review BoardはVM Wareの開発チームが使用しているDjangoで開発されたソースレビュー用のアプリケーションです。管理インターフェイスのカスタマイズ事例として参考にすると良いでしょう。
HTTPステータスの制御
前編で、商品ページの表示機能を実装しましたが、存在しないIDのURLが指定された場合、図7のようにサーバーエラー画面(HTTPレスポンスコード500)が表示されてしまいます。
ここはサーバエラーにならずにHTTPレスポンスコードの404(ページが存在しない)を返すように実装してみましょう。モデルの取得に使用している「Item.objects.get」関数は、データが存在しない場合Item.DoesNotExist例外を送出しますのでexcept節でハンドリングし、404レスポンスコードを返すためのオブジェクトをraiseします。この404レスポンスコードを返すためのオブジェクトはdjangoが用意しているクラスであるdjango.http.Http404を使用します。アプリケーションフォルダのviews.pyの「item_page_display」ビュー関数を、リスト7のように編集します。
from django.http import Http404
def item_page_display(request,item_id):
try:
item = Item.objects.get(id=item_id)
except Item.DoesNotExist:
raise Http404
t = loader.get_template('page/item.html')
c = Context(
{'item':item }
)
return HttpResponse(t.render(c))
記述を追加後、商品ページをリロードしてみましょう。図8のように404エラーが表示されることが確認できます。
- 修正履歴
-
- 2009/09/16 17:58 [リスト11]views.py if form.is_valid(): 行を追加しました。
この記事は参考になりましたか?
- Djangoチュートリアル連載記事一覧
-
- Djangoチュートリアル(後編)
- Djangoチュートリアル(前編)
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



