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

インターン(その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も同様にオーバーライドし編集していこうと思います。






コメント

このブログの人気の投稿

はじめまして!

はじめまして!
株式会社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(); shfor 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_program unzip /usr/p…