スキップしてメイン コンテンツに移動

インターン(その1)

初めまして。
1月8日から2月24日まで、株式会社MNUに実務訓練としてお世話になっています、
豊橋技術科学大学の近藤です。

実務訓練の期間中に学んだ事、感じた事を、
こちらのブログにまとめていこうと考えています。

成果を出し、プログラマとして成長できるよう、
頑張りたいと思います。


現在作成中の、DjangoのAdminサイト出力機能を利用した、
汎用的なフォーム出力機能について、まとめてみたいと思います。

DjangoのAdminサイト出力を実装しているのは、
  • AdminのIndex部分:django.contrib.admin.sites
  • 各モデルのに関する部分:django.contrib.admin.options
で行っているようです。

今回は最初に、モデルのインスタンス追加・編集・一覧・削除
機能の実装から始めました。

ModelAdmin内の response_add, response_change,
response_post_save_add, response_post_save_change,
delete_view にて、TemplateResponseを返してページ表示を行っています。

なので、viewsでこれらの関数を呼び出せば、
Adminページと同様のものが出力されます。

しかしながら、リンク先まで同じであったり
(つまり、adminページに飛んでしまう)
管理者権限を持っていないと使えないなど、問題があるため
ModelAdminをoverrideしたクラスを作成し、実装することにしました。

Responseを返す関数内で、adminのページをリンク先として指定しているので、
ページ名の変更を行う必要がありました。
また、テンプレート内でも同様の部分があるため、
変更しました。

# ex. In response_add
if post_url_continue is None:
    post_url_continue = reverse('%s_%s_change', %
        (opts.app_label, opts.model_name),
 変えた名前でurlを用意し、viewsに記述した関数でそれぞれ、
snipper_change, snippet_add, snippet_listを呼び出すことで、
任意のページにadminページを表示できました。


今後は、viewsやurlsの記述を自動化するため、
AdminSiteも同様にオーバーライドし編集していこうと思います。






コメント

このブログの人気の投稿

INTEROP Tokyo2015

6月11日(木)Interop Tokyoへ行ってきました。 私の目当ては、CITRIX社 ブース会場で行われた クラウド・エバンジェリストの北瀬公彦さんと常田秀明さんの講演です CITRIX社のロードバランサーであるネットスケーラーの活用事例を IBM社のクラウドサービスSoftLayerを例に説明されていました。 CITRIX社は、IBM社のグローバル提携企業だから、 CITRIX社のロードバランサーであるネットスケーラーと SoftLayer は、セットで説明されていました。 SoftLayer は、データセンターをプライベートにつなぐネットワークだっていう話でしたので、 IBM社のSoftLayer の物理サーバーを使えば、 データセンターをクラウド化ができる。 (オンプレミスの環境をそのまあ維持してデータセンターへ移行できる) 従来のオンプレミスユーザー最適だってことでした。 そのため、仮想化とか、クラウドがどうかとか説明必要ないということになり、 企業の情報システム担当者は、安心して使えるし、経営者にも説明しやすいと思いました。 自前で仮想化システム研究できる余裕はなく、 PaaSは不安という感じがあれば、 SoftLayerのIaaSサービスって、選択しやすいし、わかりやすい。 最適なクラウド基盤を選択できるっていいなと思いました。

はじめまして!

はじめまして! 株式会社MNUで新しくブログを始めます。 主に、プログラムに関する技術的なことを中心に社員が持ち回りで書いていきます。 皆様のお役に立てれば幸いです。 どうぞ、これからよろしくお願いします。 ここから下はコードを表示するサンプルです。 int x = foo(); /* This is a comment This is not code Continuation of comment */ int y = bar(); // This is line 4. foo(); bar(); baz(); boo(); far(); faz(); sh for target do WORKDIR=$(mktemp -d "$EXTRACTHOMEDIR"/XXXXXX) case "$target" in *.[Tt][Gg][Zz]|*.[Tt][Aa][Rr].[Gg][Zz]|*.[Tt][Aa][Rr].[Zz]) tar vzxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Tt][Bb][Zz]|*.[Tt][Aa][Rr].[Bb][Zz]2) tar vjxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Gg][Zz]) gzip -d "$target" move_to_currentpath "$WORKDIR" "$target" ;; *.[Zz][Ii][Pp]|*.[JjWw][Aa][Rr]) check_required_pro...