🐍

【Python】Djangoでデータベースの内容をビューに表示する

2024/11/19に公開

開発環境:

  • 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に準ずる内容となっている。
  • アプリケーションのトップページが表示されている状態かつデータベースの設定が完了している状態から解説をしていく。

https://docs.djangoproject.com/en/5.1/intro/tutorial03/

開発環境の構築がまだの方はこちらから↓

https://zenn.dev/code_journey_ys/articles/ddd8ba305a2538

データベースの設定がまたの方はこちらから↓

https://zenn.dev/code_journey_ys/articles/50df0fe110baac

基礎編

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

http://localhost:8000/categories/へアクセス

8.python adminにログインし、データを追加

python adminにログイン

データを追加

9.ページ表示確認

再度http://localhost:8000/categories/へアクセスし、追加したデータが表示されるかを確認

Discussion