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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1563閲覧

Create、Updateで元のListが表示されない。(元のListへ遷移(reverse)できない)

art35

総合スコア13

Django

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/05 02:57

編集2021/10/12 05:42

前提・実現したいこと

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 %}

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

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

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

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

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

guest

回答2

0

success_url = reverse_lazy('csdc_liset, kwargs={'pk':self.kwargs['pk'])

ではどうですか?

投稿2021/10/07 04:36

編集2021/10/07 04:37
k888

総合スコア123

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

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

art35

2021/10/07 05:17

回答ありがとうございます。 必要そうな部分を追加して以下のようにしてみましたところ、 success_url = reverse_lazy('csdc_liset', kwargs={'pk':self.kwargs['pk']}) name 'self' is not definedとName Errorがでております。
art35

2021/10/07 07:37

def get_success_url(self): return reverse_lazy("csdc_list",kwargs={"pk":self.kwargs["pk"]} ) 上記のようにしてみましたが、Key Error at /cs_create/ "pk" が出ております。 エラー文は  return super().form_valid(form) Variable Value Dev_Check_List <Dev_Check_List: A> __class__ <class 'day_check.views.Dev_Check_ListCreate'> form <Dev_Check_ListForm bound=True, valid=True, fields=(line;label)> kwargs {} self <day_check.views.Dev_Check_ListCreate object at 0> return reverse_lazy("csdc_list",kwargs={"pk":self.kwargs["pk"]} ) Variable Value self <day_check.views.Dev_Check_ListCreate object at 0> の2か所となっております。
guest

0

自己解決

調べながらいろいろ試してみましたが、結局は以下のようにしたところ元の遷移できました。
listfuncもclassにしてgeneric.Viewに変更しています。

args = (self.object.line.id,)

views.py def get_success_url(self, **kwargs): if kwargs is None: return reverse_lazy('csdc_list', kwargs={"pk":self.objects.line["pk"]} ) else: return reverse_lazy('csdc_list', args = (self.object.line.id,))

投稿2021/10/12 05:35

編集2021/10/12 05:43
art35

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問