| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Django 最初のアプリケーション 2」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==Django 最初のアプリケーション 2 (Admin サイトの構築)==
+
==[[Django 最初のアプリケーション 2]] (Admin サイトの構築)==
[[Django 最初のアプリケーション 3]] | ] Python][[Django]] | [[[[前|Django 最初のアプリケーション 1]] | ]][[[[次]] |
+
[Python][Django][[Django 最初のアプリケーション 3]|[前|Django 最初のアプリケーション 1]]][[[次]]
  
Pythonの概要も分かり易い.
+
[[Python]]の概要も分かり易い.
 
{{amazon|477413760X}}
 
{{amazon|477413760X}}
  
11行目: 11行目:
  
 
===Admin サイトを有効化===
 
===Admin サイトを有効化===
*DjangoのAdminサイトはデフォルトでは有効でない
+
*[[Django]]のAdminサイトはデフォルトでは有効でない
 
====有効化手順====
 
====有効化手順====
 
====="django.contrib.admin" を INSTALLED_APPS セッティングに追加する=====
 
====="django.contrib.admin" を INSTALLED_APPS セッティングに追加する=====
50行目: 50行目:
 
  0 errors found
 
  0 errors found
 
   
 
   
  Django version 1.0.2 final, using settings 'mysite.settings'
+
  [[Django]] version 1.0.2 final, using settings 'mysite.settings'
 
  Development server is running at http://192.168.24.14:8080/
 
  Development server is running at http://192.168.24.14:8080/
  Quit the server with CONTROL-C.
+
  Quit the server with CONT[[R]]OL-C.
  
 
====Adminサイトへログイン====
 
====Adminサイトへログイン====
59行目: 59行目:
 
[[File:0354_django_firstapp06.jpg]]
 
[[File:0354_django_firstapp06.jpg]]
  
=====Django 最初のアプリケーション 1で設定したユーザIDとパスワードでログイン=====
+
=====[[Django 最初のアプリケーション 1]]で設定したユーザIDとパスワードでログイン=====
 
[[File:0355_django_firstapp07.jpg]]
 
[[File:0355_django_firstapp07.jpg]]
  
71行目: 71行目:
  
 
====機能の確認====
 
====機能の確認====
*Pollを登録したのでDjangoのインデックスページに表示される
+
*Pollを登録したので[[Django]]のインデックスページに表示される
 
[[File:0356_django_firstapp08.jpg]]
 
[[File:0356_django_firstapp08.jpg]]
 
*Pollsをクリックすると、チェンジリストページが開く。このページでは、データベース上のすべてのPollsが表示される
 
*Pollsをクリックすると、チェンジリストページが開く。このページでは、データベース上のすべてのPollsが表示される
80行目: 80行目:
 
=====覚書=====
 
=====覚書=====
 
*Poll モデルから、form は自動生成される
 
*Poll モデルから、form は自動生成される
*モデルのフィールド型(DateTimeField, CharField)は、適切なHTMLのInputタグとして表示される
+
*モデルのフィールド型(DateTimeField, CharField)は、適切な[[HTML]]のInputタグとして表示される
*DateTimeField は、"Today" リンクや、カレンダーポップアップへのリンクが表示され、時間の場合、"Now"リンクや、時間を選択するポップアップへのリンクが表示される
+
*DateTimeField は、"Today" [[リンク]]や、カレンダーポップアップへの[[リンク]]が表示され、時間の場合、"Now"[[リンク]]や、時間を選択するポップアップへの[[リンク]]が表示される
  
 
{|class="wikitable"
 
{|class="wikitable"
123行目: 123行目:
 
[[File:0360_django_firstapp12.jpg]]
 
[[File:0360_django_firstapp12.jpg]]
 
====開閉可能にする====
 
====開閉可能にする====
*Djangoが提供する collapse クラスを使用する
+
*[[Django]]が提供する collapse クラスを使用する
 
     class PollAdmin(admin.ModelAdmin):
 
     class PollAdmin(admin.ModelAdmin):
 
     fieldsets = [(None,                {'fields':['question']}),       
 
     fieldsets = [(None,                {'fields':['question']}),       
148行目: 148行目:
 
*Choiceの追加に、Pollを指定するオプションが表示される
 
*Choiceの追加に、Pollを指定するオプションが表示される
 
[[File:0363_django_firstapp15.jpg]]
 
[[File:0363_django_firstapp15.jpg]]
*Djangoは外部キーを把握しており、プルダウンにすべてのPollを選択可能にする
+
*[[Django]]は外部キーを把握しており、プルダウンにすべてのPollを選択可能にする
  
 
=====2つ目の方法=====
 
=====2つ目の方法=====
178行目: 178行目:
 
===チェンジリストのカスタマイズ===
 
===チェンジリストのカスタマイズ===
 
====一覧にカラムを表示====
 
====一覧にカラムを表示====
*Djangoではデフォルトで、オブジェクトの str() メソッドを一覧に表示しているが、役に立つ別のフィールドを list_display オプションを利用して表示することもできる
+
*[[Django]]ではデフォルトで、オブジェクトの str() メソッドを一覧に表示しているが、役に立つ別のフィールドを list_display オプションを利用して表示することもできる
  
 
  class PollAdmin(admin.ModelAdmin):
 
  class PollAdmin(admin.ModelAdmin):
227行目: 227行目:
  
 
===Admin のルック&フィールの変更===
 
===Admin のルック&フィールの変更===
*Djangoのテンプレートシステム機能によって、ルック&フィールを簡単に変更できる
+
*[[Django]]のテンプレートシステム機能によって、ルック&フィールを簡単に変更できる
*mysite/settings.py 設定ファイルを開き、Djangoテンプレートの設定をTEMPLATE_DIRSで変更する
+
*mysite/settings.py 設定ファイルを開き、[[Django]]テンプレートの設定をTEMPLATE_DIRSで変更する
*デフォルトで、TEMPLATE_DIRSは空になっている
+
*デフォルトで、TEMPLATE_DI[[R]]Sは空になっている
  TEMPLATE_DIRS = (
+
  TEMPLATE_DI[[R]]S = (
 
     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
 
     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
     # Always use forward slashes, even on Windows.
+
     # Always use forward slashes, even on [[Windows]].
 
     # Don't forget to use absolute paths, not relative paths.
 
     # Don't forget to use absolute paths, not relative paths.
 
     "/home/my_username/mytemplates",
 
     "/home/my_username/mytemplates",
 
  )
 
  )
  
*TEMPLATE_DIRS で指定したフォルダの下に adminフォルダを作成し、/django/contrib/admin/templates/admin/base_site.html をコピーする
+
*TEMPLATE_DI[[R]]S で指定したフォルダの下に adminフォルダを作成し、/django/contrib/admin/templates/admin/base_site.html をコピーする
 
  # cd /usr/local/lib/python2.6/site-packages/django/contrib/admin/templates/admin
 
  # cd /usr/local/lib/python2.6/site-packages/django/contrib/admin/templates/admin
 
  # cp base_site.html /home/my_username/mytemplates/admin
 
  # cp base_site.html /home/my_username/mytemplates/admin
255行目: 255行目:
 
[[File:0371_django_firstapp23.jpg]]
 
[[File:0371_django_firstapp23.jpg]]
  
[[Django 最初のアプリケーション 3]] | ] [[[前|Django 最初のアプリケーション 1]] | ]][[[[次]] |
+
[[Django 最初のアプリケーション 3]|[前|Django 最初のアプリケーション 1]]][[[次]]

2020年2月16日 (日) 04:24時点における最新版

Django 最初のアプリケーション 2 (Admin サイトの構築)

[Python][Django][[Django 最初のアプリケーション 3]|[前|Django 最初のアプリケーション 1]]][[[次]]

Pythonの概要も分かり易い.

を参考にサンプルアプリケーションを作成してみる

Admin サイトを有効化

  • DjangoのAdminサイトはデフォルトでは有効でない

有効化手順

"django.contrib.admin" を INSTALLED_APPS セッティングに追加する
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'mysite.polls'
)
python manage.py syncdb を実行。データベースが更新される必要がある
# python manage.py syncdb
Creating table django_admin_log
Installing index for admin.LogEntry model
mysite/urls.py ファイルを編集し、"Uncomment the next two lines..." 以下のコメントをはずす
from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin   # <- コメントはずす
admin.autodiscover()               # <- コメントはずす

urlpatterns = patterns(,
    # Example:
    # (r'^mysite/', include('mysite.foo.urls')), 

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin:
    (r'^admin/(.*)', admin.site.root),   # <- コメントはずす
)

開発サーバー起動

  • アドレスとポートを指定して起動
# python manage.py runserver 192.168.24.14:8080
Validating models...
0 errors found

Django version 1.0.2 final, using settings 'mysite.settings'
Development server is running at http://192.168.24.14:8080/
Quit the server with CONTROL-C.

Adminサイトへログイン

アクセス http://ホスト:ポート/admin/

0354 django firstapp06.jpg

Django 最初のアプリケーション 1で設定したユーザIDとパスワードでログイン

0355 django firstapp07.jpg

作成した、PollオブジェクトをAdminサイトに追加する

  • mysite/polls に admin.py ファイルを作成し、以下の内容を記述
from mysite.polls.models import Poll
from django.contrib import admin

admin.site.register(Poll)
  • サーバーを再起動

機能の確認

  • Pollを登録したのでDjangoのインデックスページに表示される

0356 django firstapp08.jpg

  • Pollsをクリックすると、チェンジリストページが開く。このページでは、データベース上のすべてのPollsが表示される
  • そのうちの1つを選択して変更することができる

0357 django firstapp09.jpg

  • 編集するために、"What's up"を選択

0358 django firstapp10.jpg

覚書
  • Poll モデルから、form は自動生成される
  • モデルのフィールド型(DateTimeField, CharField)は、適切なHTMLのInputタグとして表示される
  • DateTimeField は、"Today" リンクや、カレンダーポップアップへのリンクが表示され、時間の場合、"Now"リンクや、時間を選択するポップアップへのリンクが表示される
画面下部のオプション 内容
Save 保存して、チェンジリストへ戻る
Save and continue editing 保存して、リロード
Save and add other 保存して、ブランクページを開く
Delete 削除確認へ

Admin Form のカスタマイズ

  • admin form の見た目や働きをカスタマイズしたい場合、/mysite/polls/admin.py を以下のように変更する

フィールドの表示順を変更する

from mysite.polls.models import Poll
from django.contrib import admin

#以下を追加
class PollAdmin(admin.ModelAdmin):
        fields = ['pub_date', 'question']

#PollAdmin引数を追加
admin.site.register(Poll,PollAdmin)

0359 django firstapp11.jpg

フィールドが多数ある場合など、フィールドセットに分割

   class PollAdmin(admin.ModelAdmin):
   fieldsets = [(None,                {'fields':['question']}),      
                ('Date information',  {'fields':['pub_date']}),
    ]

0360 django firstapp12.jpg

開閉可能にする

  • Djangoが提供する collapse クラスを使用する
   class PollAdmin(admin.ModelAdmin):
   fieldsets = [(None,                {'fields':['question']}),      
                ('Date information',  {'fields':['pub_date'],'classes':['collapse']}),
    ]

0361 django firstapp13.jpg 0362 django firstapp14.jpg

関連オブジェクトの追加

  • Poll は複数の Choice 持つが、Pollの adminページでは Choice が表示されていない。
1つ目の方法
  • Pollと同様Choiceも adminに 追加する
from mysite.polls.models import Poll, Choice

from django.contrib import admin

class PollAdmin(admin.ModelAdmin):
        fieldsets = [
                (None   ,               {'fields':['question']}),
                ('Date information',     {'fields':['pub_date'],'classes':['collapse']}),
        ]
admin.site.register(Poll,PollAdmin)
admin.site.register(Choice)
  • Choiceの追加に、Pollを指定するオプションが表示される

0363 django firstapp15.jpg

  • Djangoは外部キーを把握しており、プルダウンにすべてのPollを選択可能にする
2つ目の方法
  • 1つ目の方法は非効率。Pollオブジェクトから、Choiceオブジェクトを追加できるようにするには、以下のようにする
from mysite.polls.models import Poll, Choice
from django.contrib import admin 

class ChoiceInline(admin.StackedInline):
        model = Choice
        extra = 3 

class PollAdmin(admin.ModelAdmin):
        fieldsets = [
                (None   ,               {'fields':['question']}),
                ('Date information',     {'fields':['pub_date'],'classes':['collapse']}),
        ]
        inlines = [ChoiceInline]

admin.site.register(Poll,PollAdmin)
#admin.site.register(Choice)

0364 django firstapp16.jpg

  • StackedInline -> TabularInline に変更すると、以下のような表示になる
class ChoiceInline(admin.TabularInline):

0365 django firstapp17.jpg

チェンジリストのカスタマイズ

一覧にカラムを表示

  • Djangoではデフォルトで、オブジェクトの str() メソッドを一覧に表示しているが、役に立つ別のフィールドを list_display オプションを利用して表示することもできる
class PollAdmin(admin.ModelAdmin):
        fieldsets = [
                (None   ,               {'fields':['question']}),
                ('Date information',     {'fields':['pub_date'],'classes':['collapse']}),
        ]
        inlines = [ChoiceInline]
        # この行を追加
        list_display = ('question', 'pub_date', 'was_published_today')

0366 django firstapp18.jpg

カラムの名称を変更

  • カラムヘッダーをクリックすることでソートできるが、任意に追加した was_published_today メソッドなどでは利用不可
  • デフォルトではカラムにメソッド名が表示されているが、short_description 属性にて変更できる

/mysite/polls/models.py

class Poll(models.Model):
                :
        def was_published_today(self):
                return self.pub_date == datetime.date.today()
        # 以下を追加
        was_published_today.short_description = 'Published today?'

0367 django firstapp19.jpg

フィルターの追加

class PollAdmin(admin.ModelAdmin):
        fieldsets = [
                (None   ,               {'fields':['question']}),
                ('Date information',     {'fields':['pub_date'],'classes':['collapse']}),        ]
        inlines = [ChoiceInline]        list_display = ('question', 'pub_date', 'was_published_today')
        # 以下を追加
        list_filter = ['pub_date']

pub_date に対するフィルターサイドバーが表示される 0368 django firstapp20.jpg

検索フィールドの追加

以下を追加

search_fields = ['question']

0369 django firstapp21.jpg

日付フィールドでのドリルダウン

以下を追加

date_hierarchy = 'pub_date'

0370 django firstapp22.jpg

Admin のルック&フィールの変更

  • Djangoのテンプレートシステム機能によって、ルック&フィールを簡単に変更できる
  • mysite/settings.py 設定ファイルを開き、Djangoテンプレートの設定をTEMPLATE_DIRSで変更する
  • デフォルトで、TEMPLATE_DIRSは空になっている
TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "/home/my_username/mytemplates",
)
  • TEMPLATE_DIRS で指定したフォルダの下に adminフォルダを作成し、/django/contrib/admin/templates/admin/base_site.html をコピーする
# cd /usr/local/lib/python2.6/site-packages/django/contrib/admin/templates/admin
# cp base_site.html /home/my_username/mytemplates/admin
  • コピーしたファイルを適当に変更
{% load i18n %}
{% load i18n %}

{% block title %}テンプレート:Title | {% trans 'My Sample site admin' %}{% endblock %}

{% block branding %}
<h1 id="site-name">{% trans 'My Sample  administration' %}</h1>
{% endblock %}

{% block nav-global %}{% endblock %}
  • タイトルが変更された

0371 django firstapp23.jpg

[[Django 最初のアプリケーション 3]|[前|Django 最初のアプリケーション 1]]][[[次]]