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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1358閲覧

Django+Jqueryで追加ボタンで追加した行を削除するボタンを実装したい

07290729

総合スコア15

Django

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/02/07 09:40

編集2019/02/10 02:40

構成管理のためにサーバの情報を取得して
DBなどに登録するUIを作っているのですが
jqueryで、disk2, 3, 4, ...
のように数値を遷移させる方法がわからず困っています、、、
djangoのコードの一環のため以下のドキュメントを参照させていただいています。
※内容はjqueryに起因するものという認識なので上記タグで投稿しました

https://narito.ninja/blog/detail/36/

特に <script>内の
var totalManageElement = $('#id_tr_disk-TOTAL_FORMS');
この部分で操作時点で画面上で操作されている

<tr><input> で囲まれた行数を取得して その次の行にIDを振ろうとしているのですが (さらに、そのIDに従って行を削除するボタンを作るのが最終目的ですが) これがうまく取得できなくて困っています。。。。

どなたかご教授いただければ幸いですmm

イメージ説明

forms.py

1# cat svradm_design/inspec_ui/forms.py 2from django import forms 3from .models import Server, Disk 4 5class InspecForm(forms.Form): 6 class Meta: 7 mode = Server 8 fields = '__all__' 9 10DiskFormSet = forms.inlineformset_factory( 11 Server, Disk, fields='__all__', extra=1, can_delete=True 12)
{% extends "inspec_ui/base.html" %} {% block content %} <h1>inspec_ui</h1> <form action="" method="get"> {% csrf_token %} <table> <tr><td>ServerName</td><td><input type="test" size="20" name="servername"></td></tr> <tr><td>CPU-Memory</td><td><input type="test" size="20" name="cpumemory"></td> <tbody id='disk'> <tr><td>Disk</td><td>partition_name</td><td>size</td><td>filesystem</td></tr> <tr id="disk1"> <td></td> <td><input type="test" size="20" name="disk_partition_name"></td> <td><input type="test" size="20" name="disk_size"></td> <td><input type="test" size="20" name="disk_filesystem"></td> <td><button id="add_disk" type="button" class="btn btn-primary">+</button></td> </tr> </tbody> <tr><td colspan='2'><input type="submit" value="Submit"></td></tr> </table> servername : {{ servername }}<br> {% endif %} {% if cpumemory %} cpumemory : {{ cpumemory }}<br> {% endif %} {% if disk_partition_name %} disk_partition_name : {{ disk_partition_name }} , disk_size : {{ disk_size }} , disk_filesystem : {{ disk_filesystem }} {% endif %} {% endblock %} {% block extrajs %} <script> //var currentDiskCount $(function(){ var totalManageElement = $('#id_tr_disk-TOTAL_FORMS'); var currentDiskCount = parseInt(totalManageElement.val()); console.log(`hoge: ${currentDiskCount}`); currentDiskCount += 1; var disk_id = `disk${currentDiskCount}` $('button#add_disk').on('click', function(){ var disk_partition_nameElement = $('<input>', { id: 'id_disk_partition_nameElement-' + currentDiskCount + '-name', type: 'disk_patrition_name', name: 'disk_set-' + currentDiskCount + '-name', }); var disk_sizeElement = $('<input>', { id: 'id_disk_set-' + currentDiskCount + '-src', type: 'disk_size', name: 'disk_set-' + currentDiskCount + '-src', }); var disk_filesystemElement = $('<input>', { id: 'id_disk_set-' + currentDiskCount + '-src', type: 'disk_filesystem', name: 'disk_set-' + currentDiskCount + '-src', }); var disk_partion_name = jQuery('<div>').append(disk_partition_nameElement.clone(true)).html(); var disk_size = jQuery('<div>').append(disk_sizeElement.clone(true)).html(); var disk_filesystem = jQuery('<div>').append(disk_filesystemElement.clone(true)).html(); var disk_delete = `<button id=\'delete_${disk_id}\'>-</button>` var addline = `<tr id=${disk_id}><td></td><td>${disk_partion_name}</td><td>${disk_size}</td><td>${disk_filesystem}</td><td>${disk_delete}</td></tr>` console.log(disk_partion_name); $('tbody#disk').append(addline) totalManageElement.attr('value', currentDiskCount); console.log('disk_id:' + currentDiskCount) }); //var currentDiskCount = 1; $(`button#delete_${disk_id}`).on('click', function(){ $('<tr id=\'disk${disk_id}\'>').remove(); //$(this).remove(); }); }); </script>

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

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

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

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

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

Lhankor_Mhy

2019/02/08 01:43

テンプレート部分に、#id_tr_disk-TOTAL_FORMS が存在しないようですが、これはご提示いただいているコードの外にあるものでしょうか? そして、その要素には現在の行数が納められている、という理解で合っていますか?
07290729

2019/02/10 02:16

先に、要旨に近いご指摘をいただいていたのですが より直接的にご指摘をいただいたgh640さんのコメントをベストアンサーとさせていただきました。 申し訳ありません。 ご指摘ありがとうございました。
guest

回答1

0

ベストアンサー

対応する form クラス等がどのようになっているのかわからないため全容はわかりませんが、 xxx-TOTAL_FORMS というのは Django の formset の機能であるということは理解された上で使われていますか?

formset は使ってなくて自前で input 要素を書かれているのであれば ID xxx-TOTAL_FORMS の要素は存在しないのではないかと思いますが、いかがでしょう。

追記 1

コメントでいただいたリクエストにお応えします。

すみません、補足させていただきました。
リストに追加したものをfomrs.pyとして使用しています。
ただ、こちらが機能していないようで(もしくはTOTAL_FORMSの書き方に問題がありそうですが)
うまく値がとれてないようなのです・・・。

formset の management_form は描画されていますか?手探りであれこれ試されるのでもよいですが、おそらく、一度公式のドキュメントにも目を通して、 formset の TOTAL_FORMS がどのように使えるものなのかを正確に理解した上で取り組まれる方が、近道ではないかと思います。

該当する部分はこのあたり ↓ です。

Stack Overflow の次のページ ↓ の回答等もとてもわかりやすいです。

投稿2019/02/09 05:51

編集2019/02/10 07:25
gh640

総合スコア1407

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

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

07290729

2019/02/10 02:42 編集

ご指摘のとおり ”formset は使ってなくて自前で input 要素を書かれているのであれば” で、まだこちらは勉強中でした・・。 こちら学習して再度コード見直してみます。ご指摘ありがとうございます。 補足) 一応 forms.pyにはFormsetを追加しているのですが (現在使用しているforms.pyを追記しました こちらが機能していないようです・・・ (おそらく書き方がおかしいのだと思いますが・・・
gh640

2019/02/10 02:41

そうでしたか。ご丁寧にコメントいただきありがとうございます。
07290729

2019/02/10 02:44

すみません、補足させていただきました。 リストに追加したものをfomrs.pyとして使用しています。 ただ、こちらが機能していないようで(もしくはTOTAL_FORMSの書き方に問題がありそうですが) うまく値がとれてないようなのです・・・。 (Jquery中のcurrentDiskCount が”NaN”になってしまっています)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問