djangoでアプリを開発した際に,フォームの入力欄の1つに選択肢を実装したいと思ったことはありませんか?
djangoでは選択肢を実装する際に,Choiceフィールドを用います
本記事では,カテゴリーモデルから参照して選択肢を作成する方法を解説します
一般的なChoiceフィールドの実装方法は下記の記事を参照してください
【django】フィールドのchoicesで選択肢から選ぶ方法
djangoでアプリを開発した際に,フォームの入力欄の1つに選択肢を実装したいと思ったことはありませんか? djangoでは選択肢を実装する際に,フィールドオプションの1つ…
目次
カテゴリーモデルから選択肢を作成する
カテゴリーモデルから作成する場合,容易にカテゴリーを増やすことができるというメリットがあります.
今回は,カテゴリーモデルを作成し,ブログモデルと多対一(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】フィールドのchoicesで選択肢から選ぶ方法
djangoでアプリを開発した際に,フォームの入力欄の1つに選択肢を実装したいと思ったことはありませんか? djangoでは選択肢を実装する際に,フィールドオプションの1つ…
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という欄から追加した選択肢が選べるはずです
参考文献
Many-to-one relationships | Django documentation
The web framework for perfectionists with deadlines.
お疲れさまでした
コメント