前提・実現したいこと
Create、UpdateしたときにCreate,Update前に表示していたtemplateへreverseができない
reverse時のコードの修正点、改善方法を教えてください。
発生している問題・エラーメッセージ
DoesNotExist at /csdc_list/12 Department matching query does not exist. 最初に表示されるlistではDepartmentのlineのkwargsをgetしてDcl_Tdのlineをfilterしている。 記事をcreateして戻るときはkwargsに記事のpkが入っているのでmatchingしない。
試したこと
urlpatterns = [
re_path('csdc_list/int:pk', listfunc, name='csdc_list'),
path(r'^','csdc_list/(?P<pk>\d+)', listfunc, name='csdc_list'),
success_url = reverse_lazy('csdc_list')
↓
//success_url = reverse_lazy('csdc_list', args[pk])
//success_url = reverse_lazy('csdc_liset, kwargs={'pk':self.kwargs{pk})
該当のソースコード
line = Department.objects.get(**kwargs)
Variable Value
kwargs {'pk': 12}
request <WSGIRequest: GET '/csdc_list/12'>
models.py class Dev_Check_List(models.Model): line = models.ForeignKey( Department, on_delete=models.CASCADE, verbose_name='ライン') label = models.BooleanField( verbose_name='ラベル確認', default=False) -------省略--------- def get_absolute_url(self): return reverse('cs_create', kwargs={'pk': self.pk}) def __str__(self): return str(self.line) class Dcl_Td(Dev_Check_List): class Meta: verbose_name = '日常点検' verbose_name_plural = '日常点検'
urls.py urlpatterns = [ path('csdc_list/<int:pk>', listfunc, name='csdc_list'), path('logout/', logoutfunc, name='logout'), path('detail_cs/<int:pk>', detailfunc, name='detail_cs'), path('cs_create/', Dcl_TdCreate.as_view(), name='cs_create'), path('delete_cs/<int:pk>', DclDelete.as_view(), name='delete_cs'), path('update_cs/<int:pk>', Dcl_TdUpdate.as_view(), name='update_cs'), ]
views.py class LdcView(generic.View): initail = {} template_name = os.path.join('csdc_list.html') model = Dcl_Td def get(self, request, **kwargs): try: line = Department.objects.get( **kwargs) except Department.DoesNotExist: line = None object_cs = Dcl_Td.objects.filter(line=line) queryset = Dcl_Td.objects.filter(line=line) return render(request, self.template_name, {'object_cs':object_cs}) def get_queryset(self, **kwargs): queryset = super().get_queryset(**kwargs) keyword = self.request.GET.get('keyword') if keyword is not None: queryset = queryset.filter(line__contains=keyword) return queryset class Dcl_TdCreate(LoginRequiredMixin,CreateView): template_name = 'cs_create.html' model = Dcl_Td fields = ('line', 'label') def form_valid(self, form): Dcl_Td = form.save() form.instance.author = self.request.user Dcl_Td.save print(Dcl_Td) return super().form_valid(form) def get_success_url(self, **kwargs): if kwargs is None: return reverse_lazy('csdc_list', kwargs={"pk":self.kwargs["pk"]} ) else: return reverse_lazy('csdc_list', args = (self.object.pk,)) class DclDelete(DeleteView): template_name = 'delete_cs.html' model = Dcl_Td success_url = reverse_lazy('csdc_list') class Dcl_TdUpdate(UpdateView): template_name = 'update_cs.html' model = Dcl_Td fields = ('line', 'label') success_url = reverse_lazy('csds_list')
csds_list.html {% block content %} {% if user.is_authenticated %} <div class="container"> <a href="{% url 'cs_create' %}" class="btn btn-info md-2" tabindex="-1" role= "button" aria-disabled="ture">新規作成</a> {% for item in object_cs %} <p>ライン:{{ item.line }}</p> <div class="alert alert-success" role="alert"> <p>ラベル:{{ item.label }}</p> <!--省略--> <a href="{% url 'update_cs' item.pk %}" class="btn btn-info" tabindex="-1" role="button" aria-disabled="true">編集画面へ</a> <a href="{% url 'delete_cs' item.pk %}" class="btn btn-secondary" tabindex="-1" role="button" aria-disabled="true">削除画面へ</a> <a href="{% url 'detail_cs' item.pk %}" class="btn btn-primary" tabindex="-1" role="button" aria-disabled="true">詳細画面へ</a> </div> {% endfor %} <a href="{% url 'logout' %}">logout</a> </div> {% else %} please login {% endif %} {% endblock content %}
cs_create.html {% block content %} <form action='' method='POST' enctype="multipart/form-date">{% csrf_token %} {{ form.as_p }} <input type='submit' value='create'> </form> {% endblock content %}
update_cs.html {% block content %} <form action='' method='POST'>{% csrf_token %} {{ form.as_p }} <input type='submit' value='update'> </form> {% endblock content %}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/07 05:17
2021/10/07 07:37