前提・実現したいこと
Djangoでメンバ一覧から資格や経歴情報を表示させたいです。
どなたかご教授お願い致します。
イメージ
メンバー一覧画面
→メンバー一覧から情報を見たいメンバーの資格の一覧ボタンをクリック
→資格と経歴の一覧が表示される
→資格と経歴にはそれぞれ追加ボタンが有り、フォームから追加ができる
発生している問題・エラーメッセージ
資格の一覧の追加ボタンを押してフォームから送信ボタンを押すと
資格の一覧には追加される。
同様に、経歴の追加ボタンを押してフォームから送信ボタンを押しても
経歴の一覧には追加されない。
該当のソースコード
views.py
class SkillList(ListView): """資格の一覧""" context_object_name='Skills' template_name='createuser/skill_list.html' paginate_by = 5 # 1ページは最大2件ずつでページングする def get(self, request, *args, **kwargs): member = get_object_or_404(Member, pk=kwargs['member_id']) # 親のメンバ Skills = member.Skills.all().order_by('id') # メンバの子供の、資格 self.object_list = Skills context = self.get_context_data(object_list=self.object_list, member=member) return self.render_to_response(context) def skill_edit(request, member_id, skill_id=None): """資格の編集""" member = get_object_or_404(Member, pk=member_id) # 親のメンバを読む if skill_id: # impression_id が指定されている (修正時) skill = get_object_or_404(Skill, pk=skill_id) else: # impression_id が指定されていない (追加時) skill = Skill() if request.method == 'POST': form = SkillForm(request.POST, instance=skill) # POST された request データからフォームを作成 if form.is_valid(): # フォームのバリデーション skill = form.save(commit=False) skill.member = member # この資格の、親のメンバをセット skill.save() return redirect('createuser:skill_list', member_id=member_id) else: # GET の時 form = SkillForm(instance=skill) # インスタンスからフォームを作成 return render(request, 'createuser/skill_edit.html', dict(form=form, member_id=member_id, skill_id=skill_id)) def skill_del(request, member_id, skill_id): """資格の削除""" skill = get_object_or_404(Skill, pk=skill_id) skill.delete() return redirect('createuser:skill_list', member_id=member_id) class HistoryList(ListView): """経歴の一覧""" context_object_name='Historys' template_name='createuser/skill_list.html' paginate_by = 5 # 1ページは最大2件ずつでページングする def get(self, request, *args, **kwargs): member = get_object_or_404(Member, pk=kwargs['member_id']) # 親のメンバ Historys = member.Historys.all().order_by('id') # メンバの子供の、経歴 self.object_list = Historys context = self.get_context_data(object_list=self.object_list, member=member) return self.render_to_response(context) def history_edit(request, member_id, history_id=None): """経歴の編集""" member = get_object_or_404(Member, pk=member_id) # 親のメンバ if history_id: # 指定されている (修正時) history = get_object_or_404(History, pk=history_id) else: # i指定されていない (追加時) history = History() if request.method == 'POST': form = HistoryForm(request.POST, instance=history) # POST された request データからフォームを作成 if form.is_valid(): # フォームのバリデーション history = form.save(commit=False) history.member = member history.save() return redirect('createuser:skill_list', member_id=member_id) else: # GET の時 form = HistoryForm(instance=history) # インスタンスからフォームを作成 return render(request, 'createuser/history_edit.html', dict(form=form, member_id=member_id, history_id=history_id)) def history_del(request, member_id, history_id): """経歴の削除""" history = get_object_or_404(History, pk=history_id) history.delete() return redirect('createuser:history_list', member_id=member_id)
forms.py
class SkillForm(ModelForm): """資格のフォーム""" class Meta: model = Skill fields = ('skill', 'state', ) class HistoryForm(ModelForm): """経歴のフォーム""" class Meta: model = History fields = ('period', 'matter', 'comment', )
skill_list.html
{% block content %} <h4 class="mt-4 border-bottom">資格の一覧 <small class="text-muted ml-3">{{ member.name }}</small></h4> <a href="{% url 'createuser:skill_add' member_id=member.id %}" class="btn btn-primary btn-sm my-3">追加</a> <table class="table table-striped table-bordered"> <thead> <tr> <th>資格</th> <th>状況</th> <th>操作</th> </tr> </thead> <tbody> {% for skill in Skills %} <tr> <!-- <td>{{ skill.id }}</td> --> <td>{{ skill.skill }}</td> <td>{{ skill.state }}</td> <td> <a href="{% url 'createuser:skill_mod' member_id=member.id skill_id=skill.id %}" class="btn btn-outline-primary btn-sm">修正</a> <button class="btn btn-outline-danger btn-sm del_confirm" data-toggle="modal" data-target="#deleteModal" data-pk="{{ skill.id }}" data-url="{% url 'createuser:skill_del' member_id=member.id skill_id=skill.id %}">削除</button> </td> </tr> {% endfor %} </tbody> </table> <h4 class="mt-4 border-bottom">経歴 <small class="text-muted ml-3">{{ member.name }}</small></h4> <a href="{% url 'createuser:history_add' member_id=member.id %}" class="btn btn-primary btn-sm my-3">追加</a> <table class="table table-striped table-bordered"> <thead> <tr> <th>期間</th> <th>案件名</th> <th>内容</th> <th>操作</th> </tr> </thead> <tbody> {% for history in Historys %} <tr> <!-- <td>{{ skill.id }}</td> --> <td>{{ history.period }}</td> <td>{{ history.matter }}</td> <td>{{ history.comment }}</td> <td> <a href="{% url 'createuser:history_mod' member_id=member.id history_id=history.id %}" class="btn btn-outline-primary btn-sm">修正</a> <button class="btn btn-outline-danger btn-sm del_confirm" data-toggle="modal" data-target="#deleteModal" data-pk="{{ history.id }}" data-url="{% url 'createuser:history_del' member_id=member.id history_id=history.id %}">削除</button> </td> </tr> {% endfor %} </tbody> </table>
models.py
class Skill(models.Model): 取得予定 = '取得予定' 取得中 = '取得中' 取得済み = '取得済み' state = [ (取得予定, '取得予定'), (取得中, '取得中'), (取得済み, '取得済み'), ] """感想""" member = models.ForeignKey(Member, verbose_name='名前', related_name='Skills', on_delete=models.CASCADE) skill = models.CharField('資格', max_length=255) state = models.CharField('状況', max_length=255, choices=state, default='取得済み') def __str__(self): return self.skill class History(models.Model): member = models.ForeignKey(Member, verbose_name='名前', related_name='Historys', on_delete=models.CASCADE) period = models.CharField('yymm ~ yymm', max_length=255) matter = models.CharField('案件', max_length=255) comment = models.TextField( verbose_name='業務内容,必要な知識', blank=True, null=False, max_length=1000,)
あなたの回答
tips
プレビュー