●修正後の質問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,になります
あなたの回答
tips
プレビュー