質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Q&A

解決済

1回答

1973閲覧

DJANGOで行、列のマトリックス表のような形で WEBページに表示したい。

s-hara

総合スコア52

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

0グッド

2クリップ

投稿2018/05/01 08:36

実現したいこと
あるモデル内に定義された複数項目を使って、行、列のマトリックス表のような形で
WEBページに表示したい。

以下、具体例です。

■以下のモデルを定義するものとします。

●models.py ''' class OsPatch(models.Model): class Meta: verbose_name = 'OSバッチ情報' verbose_name_plural = 'OSバッチ情報' server_name = models.ForeignKey(Server, on_delete=models.CASCADE,verbose_name="サーバ名") hitfixid = models.CharField("HotFix名",max_length=50) patch_type = models.CharField("パッチの種類",max_length=50) install_user = models.CharField("インストール実行ユーザ",max_length=50) install_date = models.DateTimeField("インストール日時",default=datetime.now) def __str__(self): return str(self.server_name)

OsPatchモデルの実データ例)
※下記以外の項目(パッチの種類、インストール実行ユーザ、インストール日時)は省略

サーバ名      HotFix名 ---------------------------- server01     KB0000001 server01     KB0000002 server01     KB0000003 server02     KB0000001 server02     KB0000003 server02     KB0000004 ----------------------------

表示させたいテンプレートフォーマット

------------------------------------------------------------------ サーバ名 KB0000001 | KB0000002 | KB0000003 | KB0000004| ・・・・・<HotFix名N> ------------------------------------------------------------------ server01   ●  |  ●   |  ● | × | server02    ● | × | ● | ● |

上記の通りOsPatchクラスのhitfixid項目に登録されている全値を列名に、サーバ名を行名にして、該当レコードが存在している部分は●、存在していない部分にxを表示したマトリックス表を作りたいのですが、このようなことは可能でしょうか?
可能な場合、どのような考え方で実装すればよいかイメージがわかないため、ご存知な方がいましたらご教授いただけますと幸いです。

==============================
環境:django2.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  • 思いついたその1

カスタムフィルタとかカスタムタグで

  • その2

Serverに
[("KB0000001", True),
("KB0000002", True), ... ,
("KB0000004", False),]
みたいなのを返すメソッドを定義しても実現できそう。(順序付き辞書でも可)

  • その3

表示したい表をviewの段階でリストのリストで表現してコンテキストに渡す

投稿2018/05/01 14:01

kokardy

総合スコア781

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s-hara

2018/05/02 07:34

ご回答ありがとうございました。 その3(Viewでごにょごにょやってテンプレートで表示する手法)でなんとかできました。 以下が試した内容です。 ①True=●、 False=xとし、最初にすべてFALSEステータスのサーバ名とKBの全組み合わせのリストのリストを用意。 list = [['KB000001','server01',False],['KB00001','server02',False],['KB000002','server01',False], ['KB000002','server02',False],] ②モデルから必要な情報を取得して、OsPatchクラスにサーバ名+KBが存在するリストの要素だけ False⇒Trueに更新する。 <更新後のリストの状態イメージ> list = [['KB000001','server01',True],['KB00001','server02',True],['KB000002','server01',False], ['KB000002','server02',False],] 上記をテンプレートに渡して、テンプレート側で列(Kbの値)と行(サーバ名)を自動生成して、リストの要素がTrueなら●を表示、Falseならxを表示するという感じで、マトリックス表を表示できました。 何か気になる点(もっとこうしたほうがいい等、)あればご指摘いただけますと幸いです。
kokardy

2018/05/03 14:47

現段階ではそんな感じでいいんじゃないでしょうか。 今後のメンテナンス性とかは実際に触ってる人の感覚もあるので、 もっとこうしたいというのが出てくれば、また考えたり質問したりすれば良いと思います。
s-hara

2018/05/04 00:59

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問