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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1178閲覧

DjangoでbootstrapDualListbox()を使用して入力を行いたい

RAION

総合スコア8

Django

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/08/26 10:25

編集2020/09/02 23:57

●修正後の質問2
【やりたいこと】
DjangoでbootstrapDualListbox()を使用して入力を行いたい

【現在の状況】
djangoを使用してtodoリストのようなものを作成しようとしております。
モデルPost と モデルSyainTable はmany to many で紐づけしております。
モデルPostのmust_workerにtodoを行う関係者を入力したく、名前を選択してフォームから入力しようとしております。
入力の際にbootstrapDualListbox()を使用し、リストボックスからリストボックスへの移動をすることで入力を行いたいのですが、上手くいっておりません。

【詰まっているところ】
forms.py のウィジットを定義するところに加えればよいかと考えたのですが
定義されていないというエラーになりました
どこからインポートすればよいかを教えて頂けないでしょうか
(ネットで類似を検索したのですが見つけることができませんでした)


python

1view.py 2def post_edit(request, pk): 3 form = PostForm(request.POST) 4 context = {'form': form} 5 post = get_object_or_404(Post, pk=pk) 6 must_workers = post.must_worker.all() 7 if request.method == "POST":#html からpostされたときに通すルート 8 9 form = PostForm(request.POST, instance=post) 10 formset = MustWokerlineFormSet(request.POST, instance=post) 11 if form.is_valid():#ここで選択されたリストをDBに反映したい 12 listret = request.POST.getlist("sample22") 13 14 post = form.save(commit=False) 15 post.author = request.user 16 post.published_date = timezone.now() 17 post.save() 18 formset.save() 19 return redirect('post_detail', pk=post.pk) 20 else: 21 form = PostForm(instance=post) 22 context = {'form': form} 23 context['formset'] = MustWokerlineFormSet(instance=post) 24 context['must_workers'] = must_workers 25 context['must_workers_count'] = must_workers.count() 26 #formset = MustWokerlineFormSet(instance=post) 27 return render(request, 'blog/post_edit.html', context) 28

python

1forms.py 2import bootstrap_datepicker_plus as datetimepicker 3#import bootstrapDualListbox 4 5from django import forms 6 7from .models import Post,SyainTable 8class SyainTableForm(forms.ModelForm): 9 10 class Meta: 11 model = SyainTable 12 fields = ('name', ) 13 labels = { 14 'name': '名前', 15 } 16 17class PostForm(forms.ModelForm): 18 class Meta: 19 model = Post 20 fields = ('title','text','title2','fixed_date','compleat_date', 'must_worker',) 21 widgets = { 22 'fixed_date': datetimepicker.DateTimePickerInput( 23 format='%Y-%m-%d %H:%M:%S', 24 options={ 25 'locale': 'ja', 26 'dayViewHeaderFormat': 'YYYY年 MMMM', 27 } 28 ), 29 'compleat_date': datetimepicker.DateTimePickerInput( 30 format='%Y-%m-%d %H:%M:%S', 31 options={ 32 'locale': 'ja', 33 'dayViewHeaderFormat': 'YYYY年 MMMM', 34 } 35 ), 36 #ここ作成途中ブートストラップを入れ込みたい 37 #'must_worker': bootstrapDualListbox(), 38 39 } 40 labels = { 41 'title': 'Todoタイトル', 42 'text': 'Todo詳細', 43 'title2': '記入者', 44 'fixed_date': '期日', 45 'compleat_date': '完了日', 46 'must_worker': '対象者', 47 } 48 exclude = ('SyainTable',) 49

python

1model.py 2from django.db import models 3from django.utils import timezone 4 5class Post(models.Model): 6 author = models.ForeignKey('auth.User',on_delete=models.CASCADE) 7 title = models.CharField(max_length=200) 8 title2 = models.CharField(max_length=200) 9 10 text = models.TextField() 11 created_date = models.DateTimeField( 12 default=timezone.now) 13 published_date = models.DateTimeField( 14 blank=True, null=True) 15 16 fixed_date = models.DateTimeField( 17 blank=True, null=True) 18 compleat_date = models.DateTimeField( 19 blank=True, null=True) 20 21 must_worker = models.ManyToManyField("SyainTable", related_name="must") 22 23 def publish(self): 24 self.published_date = timezone.now() 25 self.save() 26 27 def __str__(self): 28 return self.title 29 30#社員テーブル 31class SyainTable(models.Model): 32 SyainNo = models.IntegerField(primary_key=True) 33 name = models.CharField(max_length=20) 34 35 def __str__(self):#このメソッドで管理画面等で表示するものを決めてます 36 return self.name 37 38 39

HTML

1post_edit.html 2{% extends 'blog/base.html' %} 3 4{% block content %} 5<div id="content" class="colM"> 6 <h1>編集</h1> 7 <form method="POST" class="post-form">{% csrf_token %} 8 9 <h2>対象者入力</h2> 10 <select multiple="multiple" size="{{must_workers_count}}" id="sample"><!--セレクトボックスに社員テーブルに名前がある人を表示する--> 11 {% for must_worker in must_workers %} 12 <option value="option{{ forloop.counter }}">{{must_worker.name}} </option> 13 {% endfor %} 14 </select> 15 16 {{ form.as_p }} 17 18 <h2>追加部分</h2> 19 {{ formset.management_form }} 20 {% for nnfile_form in formset %} 21 {{ nnfile_form.as_p }} 22 <hr> 23 {% endfor %} 24 25 <button type="submit" class="save btn btn-default">Save</button><!--これを実行したあとは呼び元のVIEWに戻る--> 26 </form> 27 28 29</div> 30{% endblock %} 31

以下は修正前の質問をメモとして残しているだけで参照不要です。
●修正後の質問1
djangoを使用してtodoリストのようなものを作成しようとしております。

モデルPost と モデルSyainTable はmany to many で紐づけしております。
モデルPostのmust_workerにtodoを行う関係者を入力したく、名前を選択してフォームから入力したいというのがやりたいことになります。

現在できているところは
htmlの以下の箇所で
{% for nnfile_form in formset %}
{{ nnfile_form.as_p }}
<hr>
{% endfor %}
紐づけたものを使い、入力フォームを表示させているのですが、object1,object2という、社員テーブルの行を表示したような
セレクトボックスの表示となり、名前を表示しての選択ができませんでした
ここで名前を選択して入力させるにはどのようにしたらよいでしょうか。

●修正前の質問
タイトル:「リストボックスで選択した値をview.pyで参照する方法を知りたい」
bootstrapDualListboxを使用して
以下画像のような、選択前から選択済に移動させるタイプのリストボックスを表示したのですが
選択済に移動させたデータをview.pyで参照する方法が分からない為
教えて頂けないでしょうか

類似内容をいろいろと検索してみたのですが見つけることができませんでした。
Django version 2.2,になります


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

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

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

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

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

dameo

2020/08/29 07:53

やりたいことが分かりません。ソースは全部載せましょう。 基本djangoで作成したFormをViewで使用するのが一般的なdjangoの作りです。もしそうでないものを入れるのであれば、対応したFormをdjangoで作成し、それが作れるなら使えばいいと思います。 HTML側にjsのフォームを勝手に入れて、djangoでどう受ければいいか?と聞くのであれば、それはFormを作る作業を丸投げしているだけですよ。自分で作れるならお手伝いをすることは出来ますが、丸投げの作業は受けられません。
RAION

2020/08/30 00:26

dameo様 ご指摘ありがとうございます。 元の質問については、viewでは受けれないということで理解致しました。 まったくの初心者なもので、リクエストのデータにいれこんでなんとかviewでみることができるのかとかを想像しておりました。 質問にもともとやりたかったことと、ソースと追記しました 最終的にはリストボックスからリストボックスへの入力を行いたいのですが、わからないことが多々ある為、段階的な質問に変更致しました。
dameo

2020/08/30 00:27

bootstrapDualListboxとの紐付けが全くないですよね?ModelForm書いただけですよね? 動かないんじゃなくて、動くはずがないですよね? 丸投げですか?
RAION

2020/09/03 00:00 編集

その後の調査の結果 ●修正後の質問1  につきましては 社員テーブルを以下のように変更するとことで対応できました class SyainTable(models.Model): SyainNo = models.IntegerField(primary_key=True) name = models.CharField(max_length=20) def __str__(self):#ここで表示する項目を決めることができることが分かった return self.name 上記解決により、再度質問の内容を修正致しました
dameo

2020/09/03 00:32

bootstrapDualListboxと紐づく単一のFormを自作できるのであれば、まずそれを自作してください。 それは現在Djangoにもないし、他のpackageでも提供されていないものです。 ここまで出来たというのがあればそれをお手伝いすることは可能です。 しかし現状は全く骨組みもない状態で、それがないのに周りをいくら書いても意味がありません。
RAION

2020/09/05 06:45

ご確認頂きありがとうございます 以下のように書けば簡単に使用できるようなものかと勘違いしておりましたが Django用として提供されているものしか以下のような使いかたはできず bootstrapDualListboxはdjango用ではないので それを使う仕組みを独自に作成しなさいということで理解致しましたが そういうことでしょうか? であれば、今の私にはハードルが高く 該当部分の入力はマルチ選択できるセレクトボックスで代用しようと思っております widgets = { 'fixed_date': datetimepicker.DateTimePickerInput( format='%Y-%m-%d %H:%M:%S', options={ 'locale': 'ja', 'dayViewHeaderFormat': 'YYYY年 MMMM', } ), 'compleat_date': datetimepicker.DateTimePickerInput( format='%Y-%m-%d %H:%M:%S', options={ 'locale': 'ja', 'dayViewHeaderFormat': 'YYYY年 MMMM', } ), #ここ作成途中ブートストラップを入れ込みたい #'must_worker': bootstrapDualListbox(),
dameo

2020/09/05 07:02

bootstrapはもともとtwitterで使われていたフロントエンドのコンポーネントライブラリ。 JavaScriptとCSSで書かれています。 https://getbootstrap.jp/ djangoはpythonのweb frameworkであって、基本リクエストに従ってHTMLなどのレスポンスを生成するフレームです。JavaScriptはブラウザ上のHTMLの中で、ユーザーイベントなどをトリガに動くものであり、djangoの扱う範疇とは直接関係ありません。 最終的にはブラウザからHTTPでリクエストされる以上、送られるデータはdjangoで解釈可能ですが、紐付けがどうなっているのか調べて、ちゃんと対応が取れないといけません。それをせずに「こういうことがしたいですが分かりません」といきなり質問されたので、じゃあまずは出来るものなら途中まで作れと言っただけですよ。別に普通にdjangoもDualListBoxも単品なら個別に使える人なら、紐付けするにしたってそれほど難しい課題ではありません。ただ、出来ないのであれば、他の方法を検討し、勝手にやってください。DateTimePickerとの関連は何もないと思うし、よく分かりませんが、チャレンジするのはあなたの自由です。頑張ってください。
RAION

2020/09/07 03:58

いろいろと勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問