LoginSignup
1
1

More than 5 years have passed since last update.

Python3.5.1 + Django2.0.3 で、簡単なCRUDアプリを作る(3)

Posted at

削除機能を追加しよう

さて、前回までで登録・更新までが出来るようになりました。
あとは削除ですね。では早速やっていきましょう。
前回、前々回もそうですが、下記のサイトを参考にしながら、python3.5とDjango2.0に対応させた記述にしています。
https://eiry.bitbucket.io/tutorials/tutorial/crud_delete.html

一覧画面に削除ボタンを追加

index.html
{% extends 'crud/base.html' %}
{% block body %}
<a href="/add">登録画面へ</a>
<form method="post" action="/delete"> #追加
    <table border="1">
      <thead>
        <tr>
          <th>部門名</th>
          <th>略称</th>
          <th>登録日</th>
          <th> </th> #追加
        </tr>
      </thead>
      <tbody>
        {% for department in departments %}
          <tr>
            <td><a href="/edit/{{ department.id }}/">{{ department.name }}</a></td>
            <td>{{ department.name_short }}</td>
            <td>{{ department.created_at }}</td>
            <td><input type="checkbox" name="delete_ids" value="{{ department.id }}"></td> #追加
          </tr>
        {% endfor %}
      </tbody>
    </table>
    {% csrf_token %} #追加
    <input type="submit" value="チェックしたものを削除"> #追加
</form>#追加
{% endblock %}

「#追加」と書いているところを追加しています。
今回初めてformタグでtableタグで囲むようにしました。
これまでは実はこのformタグはありませんでしたが、普通に動いていました。
formタグに関する一般的な説明は、こちらに良記事がありましたので参照してください。
https://qiita.com/mikuhonda/items/f3126380d3340f3d8a2b

ひとまずこれで削除ボタンを押すと、/deleteに遷移すると思いますので、試してみてください。

削除処理を書く

まずはviews.pyに追加します。

crud/views.py
from django.views.decorators.http import require_POST

そしてdelete処理を書きます。

views.py
@require_POST
def delete(request):
    delete_ids = request.POST.getlist('delete_ids')
    if delete_ids:
        Department.objects.filter(id__in=delete_ids).delete()
    return redirect('/')

これで確認をしてみてください。チェックしたものだけが削除されるようになっているはずです。

実際のアプリケーションでは、削除前に確認を入れるのが普通ですが、今回はとりあえず簡単にCRUD処理を実現するということに主眼を置いていますので、クリックしたらすぐに削除されます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1