【データの取得を行うメソッド】
1. **get(self, request, *args, **kwargs)**
テンプレートからGETメソッドで送られてきたときに処理を行う。表示のためのメソッド
# 複数取得
def get(self, request):
items = Item.objects.all()
return render(request, 'item_list.html', {'items': items})
# 1つ取得
def get(self, request, pk):
item = Item.objects.get(pk=pk)
return render(request, 'item_detail.html', {'item': item})
データベースから値を取得するメソッド(2つ)
2. **get_queryset(self)**
データベースから複数の値を取得することが主な使い方。modelとしかやり取りしないのが基本。
単数の特定の値を処理するときは下記のget_objectメソッドで処理する。
使う場面: 一覧表示などで、複数のオブジェクトを扱う場合。
データの取得方法:全体のリストや条件に基づいたフィルタリングを行います。
def get_queryset(self):
return Item.objects.filter(category='books')
3. **get_object(self, queryset=None)**
データベースから1つの特定の値を取得することが主な使い方。modelとしかやり取りしないのが基本。
複数の特定の値を処理するときは上記のget_querysetメソッドで処理する。
使う場面: 詳細表示、更新、削除の際に特定のオブジェクトを扱う場合。
データの取得方法:get_object
はURLの pk
(プライムキー:DBの一意なキー、主にID)を使って特定のオブジェクトを取得。
一致するデータがなければ自動で404エラーを出してくれる
def get_object(self, queryset=None):
obj = super().get_object(queryset)
return obj
【データの送信・処理を行うメソッド】
1. **post(self, request, *args, **kwargs)**
テンプレートからフォームで送られてきたデータを処理する
def post(self, request):
form = ItemForm(request.POST)
if form.is_valid():
form.save()
return redirect('item_list')
return render(request, 'item_form.html', {'form': form})
2. **form_valid(self, form)**
フォームのバリエーションチェックを通過した時の処理を行う
def form_valid(self, form):
form.save()
return super().form_valid(form)
3. **form_invalid(self, form)**
- フォームが間違っているときの処理を行います。
```python
def form_invalid(self, form):
return self.render_to_response(self.get_context_data(form=form))
```
### データの削除
1. **delete(self, request, *args, **kwargs)**
- データを削除するときに使います。
```python
def delete(self, request, *args, **kwargs):
item = self.get_object()
item.delete()
return redirect('item_list')
```
### 共通の処理や追加情報
1. **dispatch(self, request, *args, **kwargs)**
- リクエストを処理する前の共通の処理を行います。
```python
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return redirect('login')
return super().dispatch(request, *args, **kwargs)
```
2. **get_context_data(self, **kwargs)**
- テンプレートに渡す追加のデータを設定します。
```python
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['page_title'] = '商品一覧'
return context
```
3. **get_success_url(self)**
- 処理が成功した後のリダイレクト先を指定します。
```python
def get_success_url(self):
return reverse('item_list')
```
これらのメソッドを使うと、Djangoでの基本的な操作を効率的に実装できます。組み合わせて使うことが多いので、それぞれの役割を覚えておくと便利です。