adminサイトについて

52 views
Skip to first unread message

wozozo

unread,
May 13, 2009, 11:31:19 PM5/13/09
to django-ja
wozozoといいます。
adminサイトでの表示について質問させてください。

会社・店舗・商品 という関係があって、
商品を登録するときに会社を選択すると、店舗の選択肢を
選択した会社に紐付いているものだけにしてたいと思っています。

モデル定義を

class Company(models.Model):
name = models.CharField(max_length=255)

class Shop(models.Model):
name = models.CharField(max_length=255)
company = models.ForeignKey(Company)

class Item(models.Model):
name = models.CharField(max_length=255)
shop = models.ForeignKey(Shop)

のようにしているのですがこれだと商品登録時に会社を選択できないですし、

class Item(models.Model):
shop = models.ForeignKey(Shop)
company = models.ForeignKey(Company)
のようにすると選択はできるのですが店舗に紐付いていない会社でも登録できてしまいます。

adminサイトのプルダウンの選択肢を親子関係で動的に切り替えることはできますでしょうか?

よろしくお願いします。

tokibito

unread,
May 15, 2009, 1:13:58 AM5/15/09
to django-ja
岡野です。

1. 「会社を選択->店舗を選択」を行うWidgetを作成(javascriptも)
2. shopフィールドで作成したWidgetを利用するFormを作成
3. ModelAdminで作成したFormを指定
4. admin.site.registerで作成したModelAdminを利用

手順としては上記のようになると思います。

woz...@gmail.com

unread,
May 16, 2009, 3:05:27 AM5/16/09
to djan...@googlegroups.com
wozozoです。

なんとかできそうです。
やってみます。

ありがとうございました!

2009/5/15 tokibito <xxs...@yahoo.co.jp>:

hy0415

unread,
May 20, 2009, 7:22:57 AM5/20/09
to django-ja
はじめまして、hy0415です。
現在、仕事でpythonとdjangoを使っていて、管理画面のコンボボックスに親子関係を持たせるところではまっています。
管理画面にwidjetを導入する部分が見えてきません。
大変恐縮なのですが、1~4の流れを組んだサンプルプログラムを見せてはいただけないでしょうか?
> >> よろしくお願いします。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

makoto tsuyuki

unread,
May 20, 2009, 10:39:24 PM5/20/09
to django-ja
露木です。

それっぽいものを書いてみました。
http://coderepos.org/share/browser/lang/python/django_confinedselect/trunk

かなり荒削りなのでいろいろ問題はあると思いますが、やり方はわかると思います。
親子関係を渡さなければならないので、単にwidgetを作るだけではできませんでした。
なのでwidgetのインスタンス生成を行っている箇所を上書きしています。

(Safariでは)こんな感じの動作をします。
http://www.flipclip.net/clips/04dd27e451bfd88c60f2fb02a2f82e13

面白そうなのでコードを書きましたが、恐らく今後はコードを書いてみたりしません。

adminは面白いので、admin自体のコードを読んでみることをお薦めします。
#adminをカスタマイズしたい人は最終的にはadminのコードを読まないとできない?
Message has been deleted
Message has been deleted

hy0415

unread,
May 21, 2009, 7:37:51 AM5/21/09
to django-ja
hy0415です。

サンプルコードのご提示、わがままなご質問に丁寧にお答え頂き、誠にありがとうございます。
又、完成次第、ご報告を差し上げたいと思います。

>>adminは面白いので、admin自体のコードを読んでみることをお薦めします。
>>#adminをカスタマイズしたい人は最終的にはadminのコードを読まないとできない?
貴重なアドバイスありがとうございます。
該当機能の実装と併せて、adminのコードを解析し、djangoへの理解を深めたいと思います。


hy0415

unread,
May 21, 2009, 10:34:07 PM5/21/09
to django-ja
hy0415です。

コンボボックスに親子関係を持たせる処理をsafariで実現することができました。
又、十字ボタンによるデータの追加も幾度か行いましたが、正常な動作をしていました。
IE,Firefoxでも実現できるように、Javascriptのブラウザ依存をメインに調査を進めています。

今回は誠にありがとうございます。改めて御礼を差し上げます。

hy0415

unread,
May 25, 2009, 4:31:55 AM5/25/09
to django-ja

hy0415です。

django_confidendselect/admin.pyに以下のコードを記述することで、
IE6,IE7,safariでも動作いたしました。Firefoxでは動作いたしませんでした。
mozilla系のブラウザではXMLHttpRequestオブジェクトを宣言することで、
XMLHTTPオブジェクトを使用できるという情報は得たのですが駄目でした。

57行目に
55 output.append(u'''<script type="text/javascript">
56 %(parent_field_name)s_%(child_field_name)s_confine_choices =
function() {
/* IEでXMLHttpRequest を使用出来るようにする為の宣言 */
   xmlhttp = false;
if(typeof ActiveXObject != "undefined"){
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttp = false;
}
}
else if(!xmlhttp && typeof XMLHttpRequest != "undefined") {
xmlhttp = new XMLHttpRequest();
}
/* end */
p = document.getElementById('id_%(parent_field_name)s');
c = document.getElementById("id_%(child_field_name)s");

Makoto Tsuyuki

unread,
May 25, 2009, 8:10:57 AM5/25/09
to djan...@googlegroups.com
露木です。

xmlhttpに関してはadminに付属しているJavaScriptが同様の
事をしているので恐らく不要だと思います。

動かないのがFirefoxなのは不幸中の幸いでしょう。
firebugでエラー箇所の特定をしてはいかがでしょう

xmlhttpに関してもわたしの勘違いかもしれませんので注意をば

On 2009/05/25, at 17:31, hy0415 <ju8...@yahoo.co.jp> wrote:

>
>
> hy0415です。
>
> django_confidendselect/admin.pyに以下のコードを記述することで、
> IE6,IE7,safariでも動作いたしました。Firefoxでは動作いたし
> ませんでした。
> mozilla系のブラウザではXMLHttpRequestオブジェクトを宣言す
> ることで、
> XMLHTTPオブジェクトを使用できるという情報は得たのですが駄目でし

hy0415

unread,
May 26, 2009, 6:19:24 AM5/26/09
to django-ja
hy0415です。

ありがとうございます。
firebugを利用してエラー箇所を断定するところから始めてみます。
Reply all
Reply to author
Forward
0 new messages