【django】カテゴリーモデルから選択肢を作成する方法 (models.ForeignKey)

djangoでアプリを開発した際に,フォームの入力欄の1つに選択肢を実装したいと思ったことはありませんか?

djangoでは選択肢を実装する際に,Choiceフィールドを用います

本記事では,カテゴリーモデルから参照して選択肢を作成する方法を解説します

一般的なChoiceフィールドの実装方法は下記の記事を参照してください

目次

カテゴリーモデルから選択肢を作成する

カテゴリーモデルから作成する場合,容易にカテゴリーを増やすことができるというメリットがあります.

今回は,カテゴリーモデルを作成し,ブログモデルと多対一(many-to-one)のリレーションを行います

カテゴリーモデルを作成する

ブログのカテゴリー分類で選択肢となる,カテゴリーモデルを作成します

今回はプログラミング言語の種類分けを行います

class Category(models.Model):
    lang_type = models.CharField(max_length=50)

    def __str__(self):
        return self.lang_type

    class Meta:
            db_table = 'categories'

ブログモデルにカテゴリーをリレーション接続する

先ほど作成したカテゴリーモデルをブログモデルに多対一でリレーションします

多対1の関係を定義するには,django.db.models.ForeignKeyを使用します

モデルの定義順はカテゴリーから行ってください

# 先にカテゴリーを定義
class Category(models.Model):
    lang_type = models.CharField(max_length=50)
    # ...

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField(blank=True)
    # 下記の行を編集
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, blank=True, null=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'blogs'

下記の記事にあるブログモデルのlang_typeをcategoryに変更しています

djangoでは,ForeignKeyフィールド名(上記の例ではcategory)はモデル名を小文字にしたものが推奨されています

djangoに反映する

blog/admin.pyに登録しましょう

from django.contrib import admin

from .models import Blog, Contact, Category

admin.site.register(Blog)
admin.site.register(Contact)
admin.site.register(Category)

コマンドプロンプトを起動して,djangoのデータベースを更新します

python manage.py makemigrations blog
python manage.py migrate

adminからブログ記事にカテゴリー分類を行う

djangoでのプログラミングは終了したので,実際にadminでカテゴリー分類を行いましょう

http://127.0.0.1:8000/admin/
python manage.py runserver

adminにカテゴリーが追加されているか確認して,早速編集しましょう

カテゴリーの追加

カテゴリーの追加はadminから可能です

自由にカテゴリーを追加してみてください

category

記事のカテゴリー分類

ブログ記事のカテゴリー分類を行います

記事を編集すると,Categoryという欄から追加した選択肢が選べるはずです

python

参考文献

お疲れさまでした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次