🐍
【Python】Djangoでデータベースの内容をビューに表示する
開発環境:
- windows 11
- Vscode 1.87.2
- Docker 26.1.1
- Docker-compose 2.27.0
- python
- Django
達成目標
- データベース上に登録されている内容をビューでドロップダウンリストを用いて、表示させることができる。
前提
- Djangoのマニュアルの
Writing your first Django app, part 3
に準ずる内容となっている。 - アプリケーションのトップページが表示されている状態かつデータベースの設定が完了している状態から解説をしていく。
開発環境の構築がまだの方はこちらから↓
データベースの設定がまたの方はこちらから↓
基礎編
1.モデルの作成
models.pyへ以下を全て追加
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
2.モデルを管理画面に登録
admin.pyへ以下を全て追加
from .models import Category
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
3.フォームを作成
forms.py
ファイルを作成する
以下のコマンドを実行し、ターミナル
New-Item users/forms.py
forms.py
ファイルを編集
forms.py
from django import forms
from .models import Category
class CategoryForm(forms.Form):
category = forms.ModelChoiceField(
queryset=Category.objects.all(),
empty_label="選択してください", # 初期値として表示されるラベル
label="カテゴリー",
)
4.ビューの作成
views.pyに以下を全て追加
from .models import Category
def category_view(request):
categories = Category.objects.all() # データベースからカテゴリを取得
return render(request, 'users/category.html', {'categories': categories}) # 正しいパスを指定
5.テンプレートの作成
以下のコマンドを実行し、テンプレートファイルを作成
ターミナル
New-Item users/templates/users/category.html
テンプレートファイルの編集
category.htmlに以下を全て追加
<!DOCTYPE html>
<html>
<head>
<title>Categories</title>
</head>
<body>
<h1>Categories</h1>
<form method="post">
{% csrf_token %}
<label for="category">カテゴリー選択:</label>
<select name="category" id="category">
{% for category in categories %}
<option value="{{ category.id }}">{{ category.name }}</option>
{% endfor %}
</select>
<button type="submit">送信</button>
</form>
</body>
</html>
6.URLの設定
urls.py
を編集
アプリケーションフォルダ内のurls.pyへ以下を全て追加
from .views import category_view
urlpatterns = [
path('categories/', category_view, name='category_view'),
]
urls.py
を編集
プロジェクトフォルダ内のurls.pyへ以下を一部追加
from users.views import category_view # 追加
urlpatterns = [
path('admin/', admin.site.urls),
path('categories/', category_view, name='category_view'), # 追加
]
7.ページの表示確認
コンテナの再起動
コンテナの再起動
docker-compose restart
docker-compose up
Discussion