#現状
urlへ渡した変数をviewsに取込処理を行いたいと思っています。
しかし、実際にはデータがあるはずなのですが、404エラーが返ってくる状況です。
#エラー内容
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8000/list/11/item_update/9/ Raised by: app.views.item_Update No item found matching the query
エラーメッセージの最後に「No item found matching the query」と出ているので、
itemがうまく取り込めていない状況です。
#ソース
urls
1path('list/<int:pk>/item_update/<int:id>/', views.Item_Update.as_view(), name='item_update'), 2 3pkはカテゴリのpk, idはアイテムのpk
views
1class Item_Update(generic.UpdateView): 2 template_name = 'item_update.html' 3 model = Item 4 fields = ('order', 'itemname', 'price') 5 6 def get_context_data(self, **kwargs): 7 context = super().get_context_data(**kwargs) 8 context['category'] = get_object_or_404(Category, pk=self.kwargs['pk']) 9 context['item'] = get_object_or_404(Item, pk=self.kwargs['id']) 10 return context 11 12 def get_success_url(self): 13 return reverse_lazy('item_list',kwargs={"pk":self.kwargs["pk"]})
#試したこと
Modelを確認する限り、itemのpk=9は存在しています。
また、updateする前に一覧を表示していますが、その時にはカテゴリpkをもとに
一覧を表示できているので、urlから引数を引っ張ってくる処理は間違っていないと思われます。
update内でItemが取り込めていないのかと思い、下記のソースを追加して受け取れているか
確認しましたが、データはしっかり受け取れているようです。
views
1 def get_queryset(self): 2 item = self.item = get_object_or_404(Item, id=self.kwargs['id']) 3 queryset = super().get_queryset().filter(id=item) 4 return queryset
結果
TypeError at /list/11/item_update/9/ Field 'id' expected a number but got <Item: カテゴリ名 アイテム名>.
#最後に
2日間調べましたが、うまくいかないので投稿しました。
助言をお願いします。
#追記
htmlを載せていませんでした。
下記のタグにてupdate画面に移行しています。
html
1<a href="{% url 'item_update' pk=category.pk id=item.id %}">表示している項目<a>
#追記2
llr114様の実行結果です。
※menu_listとかになっていますが、投稿のソースはitemに変更しています。
update処理の中でquerysetと一緒に流した場合(試したことと同じ処理の中に記載)
※404エラー以外で無理やり実行させてる状況です。
#追記3
menu_list (質問時のlistのこと)
html
1{% extends 'base.html' %} 2 3{% block customcss %} 4{% endblock customcss %} 5 6{% block header %} 7<div class="d-flex flex-column flex-md-row align-items-center p-3 px-md-4 mb-3 bg-white border-bottom shadow-sm"> 8 <h3 class="my-0 mr-md-auto font-weight-normal">{{ category.shopname }}</h3> 9 <p>カテゴリ名:{{ category.categoryname }}</p> 10 <a type="button" class="btn btn-outline-success" href="{% url 'menu_create' category.pk %}">メニュー作成</a> 11 </div> 12{% endblock header %} 13 14{% block content %} 15<body style="background-color:gainsboro"> 16<div class="container"> 17 {% for menu in menu %} 18 <div class="alert alert-light" role="alert"> 19 <a href="{% url 'menu_update' pk=category.pk id=menu.pk %}">{{menu.order}} {{menu.menuname}} {{menu.price}}</a> 20 </div> 21</body> 22 {% endfor %} 23</div> 24{% endblock content %}
menu_update (質問時のitem_update)
html
1{% extends 'base.html' %} 2 3{% block header %} 4{% endblock header %} 5 6{% block content %} 7<body style="background-color:paleturquoise"> 8<form action="" method="POST" enctype="multipart/form-data" class="ml-1">{% csrf_token %} 9 <p>順序:{{ form.order }}</p> 10 <p>メニュー名:{{ form.menuname }}</p> 11 <p>値段:{{ form.price }}</p> 12 <input class="btn btn-primary" type="submit" value="更新"> 13 <a class="btn btn-secondary" href="{% url 'menu_list' category.pk %}">cancel</a> 14</form> 15</body> 16{% endblock content %}
回答2件
あなたの回答
tips
プレビュー