TODOタスクの状態表示と状態変更機能
前回で、TODOタスクに状態を持たせることができました。今度は、その状態の表示と、状態変化のロジックを実装することにします。
まず、TODOタスクの状態変化処理用のメソッドを用意します。
/todo/views.py
def update_task_status(request): if not request.user.is_authenticated(): return render_to_response(request, "login.html") #ログインユーザのタスクかどうかチェック task = Task.get(request.POST["key"]) if (task.user != request.user): return HttpResponseRedirect(reverse('todo.views.list_tasks')) task.status = int(request.POST["status"]) task.put() return HttpResponseRedirect(reverse('todo.views.list_tasks'))
次に、/todo/update_statusにアクセスされたらこのメソッドが呼ばれるようにします。
/todo/urls.py
urlpatterns = patterns('todo.views', ... (r'^update_status$', 'update_task_status'), ... )
最後に、TODOタスク一覧画面を変更し、個々のTODOタスクの状態と、状態を変更するボタンを追加します。
/todo/templates/task_list.html
<table class="list"> <tr> <th width="400">タイトル</th> <th width="80">状況</th> <th width="250">締切</th> <th width="100">締切お知らせメール通知</th> <th width="200">変更</th> <th width="80">削除</th></tr> {% for task in object_list %} <tr><td><a href="update?key={{ task.key }}">{{ task.title }}</a></td> <td>{{ task.status_name }}</td> <td>{{ task.limit_time|date:"Y-m-d H:i" }}</td> <td>{% if task.is_notified %}する{% else %}しない{% endif %}</td> <form action="update_status" method="post"> <input type="hidden" name="key" value="{{ task.key }}"> <td> <select name="status"> {% ifnotequal task.status 1 %}<option value="1">未着手</option>{% endifnotequal %} {% ifnotequal task.status 2 %}<option value="2">開始</option>{% endifnotequal %} {% ifnotequal task.status 3 %}<option value="3">完了</option>{% endifnotequal %} {% ifnotequal task.status 4 %}<option value="4">取消</option>{% endifnotequal %} </select> <input type="submit" value="変更"> </td> </form> <form action="delete" method="post"><td><input type="hidden" name="key" value="{{ task.key }}"><input type="submit" value="削除"></td></form> {% endfor %} </table>
これで状態を変更できるようになったので、いつものようにmanage.py updateコマンドを実行して金星翻車魚にアップロードしました。