Djangoでpostしたデータでmodelをupdateしたいのですがpostでエラーがでます。
質問が2つあるのですが、urlsが効いてないらしいのと、updateが呼ばれてないらしいことです。
testapp/views/urls.py
python
1from django.conf.urls import url 2from django.urls import include, path 3from . import views 4from testapp.views.user_views import UserViews 5from testapp.views.get_views import GetViews 6 7urlpatterns = [ 8 path('', UserViews.index, name='index'), 9 path('app0/', GetViews.as_view(), ), 10 path('app1/', UserViews.index, name='index'), 11 12 path('update/', UserViews.update, name='update'), 13]
testapp/templates/users.html
html
1{% extends "base.html" %} 2 3{% block content %} 4 <form method="post" action="update/"> 5 {% csrf_token %} 6 <table border="1"> 7 <thead> 8 <tr> 9 <th>id</th> 10 <th>name</th> 11 <th>created_at</th> 12 <th>updated_at</th> 13 <th>更新</th> 14 </tr> 15 </thead> 16 <tbody> 17 {% for user in users %} 18 <tr> 19 <td> 20 {{ user.id }} 21 <input type="hidden" name="id" id="id" value="{{ user.id }}"/> 22 </td> 23 <td> 24 <input type="text" name="username" id="username" value="{{ user.name }}"/> 25 </td> 26 <td>{{ user.created_at }}</td> 27 <td>{{ user.updated_at }}</td> 28 <td><input type="submit" name="commit" value="更新" data-disable-with="更新" /></td> 29 </tr> 30 {% endfor %} 31 </tbody> 32 </table> 33 名前 <input type="textbox" value="{{ user.name }}" name="username" /> 34 <input type="submit" name="commit" value="登録" data-disable-with="登録" /> 35 </form> 36{% endblock %}
testapp/views/user_views.html
html
1from django.shortcuts import render 2from django.http import HttpResponse, HttpResponseRedirect 3from testapp.models.app_user import AppUser 4from . import views 5from django.views.generic import TemplateView 6from django.urls import reverse 7 8class UserViews(TemplateView): 9 def index(request): 10 print('indexに入った') 11 users = { 12 'users': AppUser.objects.all(), 13 } 14 return render(request, 'users.html', users) 15 16 def update(self, request, *args, **kwargs): 17 print('updateに入った') 18 19 user.id = AppUser.objects.filter(field__contains="id=request.POST.get('id', None)").first() 20 user.name = request.POST.get('name', None) 21 user.save() 22 redirect_url = reverse('update') #'testapp:user_views') 23 parameters = urlencode({'id': user.id, 'name': user.name}) 24 url = "{redirect_url}?{parameters}" 25 return redirect(url)
エラーログ
TypeError at /update/ update() missing 1 required positional argument: 'request' Request Method: POST Request URL: http://localhost:8000/update/ Django Version: 2.2.2 Exception Type: TypeError Exception Value: update() missing 1 required positional argument: 'request' Exception Location: /Users/js/.pyenv/versions/TensorFlow/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response, line 113 Python Executable: /Users/js/.pyenv/versions/TensorFlow/bin/python Python Version: 3.6.5 Python Path: ['/Users/js/work/django_proj', '/Users/js/.pyenv/versions/TensorFlow/lib/python36.zip', '/Users/js/.pyenv/versions/TensorFlow/lib/python3.6', '/Users/js/.pyenv/versions/TensorFlow/lib/python3.6/lib-dynload', '/Users/js/.local/lib/python3.6/site-packages', '/Users/js/.pyenv/versions/TensorFlow/lib/python3.6/site-packages', '/Users/js/.pyenv/versions/TensorFlow/lib/python3.6/site-packages/six-1.11.0-py3.6.egg'] Server time: 水, 22 1月 2020 22:01:52 +0900
以上でした。
すみませんが、どうかよろしくお願いします。
質問(追記)
updateというメソッドを呼び出してmodelを更新したいのですが方法がわかりません。
情報が少し足りなかったかもしれませんので追記です。
testapp/urls.py
from django.conf.urls import url from django.urls import include, path urlpatterns = [ path('', include('testapp.views.urls')), ]
がありました。
回答1件
あなたの回答
tips
プレビュー