revision-up-to: | 17812 (1.4) |
---|
Django の発行するクッキーのドメインと、ブラウザに格納されたドメインが一致し ていないために、ログインクッキーが正しく設定されていない場合に起きる症状で す。以下の二つの対策を試してみて下さい:
SESSION_COOKIE_DOMAIN
に正しいドメインを設定してく
ださい。例えば、Django のサイトにアクセスするときに、ブラウザで
“http://www.example.com/admin/” と入力しているのなら、
“myproject.settings” には SESSION_COOKIE_DOMAIN = 'www.example.com'
と設定せねばなりません。SESSION_COOKIE_DOMAIN
もドメイン名に合わせて変更してください。ユーザネームとパスワードが本当に正しいのなら、ユーザアカウントが
is_active
で、かつ is_staff
が True
であるか確かめて下さい。
管理サイトにアクセスできるのは、 is_active
と is_staff
が共に
True
のユーザだけです。
CACHE_MIDDLEWARE_ANONYMOUS_ONLY
設定を True
にしてください。
詳しくは キャッシュのドキュメント を参照してください。
ModelAdmin
クラスの用意しているカスタマイズ用
のフックを使えば、オブジェクトを保存するときに、リクエストから取り出した情報
に基づいてフィールドの値を変更できます。具体的には、
save_model()
フックをカスタマイズして、
オブジェクトのフィールド値にリクエストから取り出した現在のユーザを反映させま
す。 ModelAdmin メソッドのドキュメント にサン
プルがあります。
ModelAdmin
の用意しているフックには、オブ
ジェクトを管理サイト上に表示するかどうかと編集可能かどうかを制御できるもの
があります。 queryset()
および
has_change_permission()
フックをカスタマイズすれば、上の質問の答えと同様、リクエストから取り出した
現在のユーザの情報に基づいて、オブジェクトの表示や編集を制御できます。
「mod_wsgi で Django を使う」というドキュメントの 管理サイト用のファイルを公開する方法 を参照してください。
Django が ManyToManyField
に対してフィルタを表示するのは、リレーション
先のオブジェクトが複数のときだけです。
例えば、 list_filter
に sites
が入っており、データベースにたった一
つしかサイトが登録されていなければ、 “Site” フィルタは表示されません。この
状況では、サイトによるフィルタは無意味だからです。
方法はいくつかあります。Django が自動生成する add/change フォームを利用して
楽をしたければ、モデルの class Admin
の js
パラメタを使ってページに
任意の JavaScript モジュールを貼り付けてください。パラメタには、 JavaScript
モジュールの URL をリストにして指定します。管理画面は、指定した JavaScript
を <script>
タグでフォームと一緒に出力します。
単に自動生成されるフォームをいじる以上の柔軟さが必要な場合には、管理サイト 用のカスタムビューを書いて下さい。管理サイトはそれ自体 Django で作られてい るので、認証システムやパーミッションのチェックなどを行うビューを自作できま す。
管理サイトのルック & フィールをカスタマイズしたいのなら、次の項目を読んで下 さい。
私達は好きなんですが、そうは思わないのなら、 CSS スタイルシートや画像ファイ ルを編集して、管理サイトのプレゼンテーションを変更できます。サイトはセマ ンティックな HTML を使って書かれているので、やりたい変更は全て CSS スタイル シートの編集で実現できます。てほどきに 管理サイトの CSS ガイド を用意してあります。
管理サイトは IE6 以外 (サポート対象外) のすべての YUI’s A-grade ブラウザで、 完全な機能を提供しており、問題なく表示されます。
角丸表示をサポートしていないなど、各々のブラウザで多少の違いはあるかもし れません。これらは、許容範囲であると考えられています。
Oct 26, 2017