Djangoモデル作成の悩み解消!CharFieldとTextFieldの選び方
DjangoにおけるCharFieldとTextFieldの違い
この2つのフィールドは、保存できる文字列の最大長とデータベースでの扱い方に違いがあります。
CharField
- 最大長を指定する必要がある(最大255文字)
- データベースでは固定長のVARCHAR型として保存される
- 短い文字列(名前、住所など)に適している
例:
class Person(models.Model):
name = models.CharField(max_length=255)
TextField
- 最大長を指定する必要がない(事実上無制限)
- データベースでは可変長のTEXT型として保存される
class BlogPost(models.Model):
content = models.TextField()
使い分け
- 文字列データが短く、最大長が明確な場合は
CharField
を使用する
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=255)
email = models.EmailField()
class BlogPost(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
views.py
from django.shortcuts import render
def create_person(request):
person = Person.objects.create(name="John Doe", email="[email protected]")
return render(request, "person_created.html", {"person": person})
def create_blog_post(request):
blog_post = BlogPost.objects.create(title="My First Blog Post", content="This is my first blog post!")
return render(request, "blog_post_created.html", {"blog_post": blog_post})
templates/person_created.html
<h1>Person created</h1>
<p>Name: {{ person.name }}</p>
<p>Email: {{ person.email }}</p>
<h1>Blog post created</h1>
<h2>{{ blog_post.title }}</h2>
<p>{{ blog_post.content }}</p>
実行方法
- このコードをプロジェクトディレクトリに保存します。
- Djangoプロジェクトを作成し、設定ファイルを編集します。
- データベースを作成し、マイグレーションを実行します。
runserver
コマンドを実行してサーバーを起動します。- ブラウザで
http://localhost:8000/
を開きます。
CharFieldとTextField以外の方法
TextChoices
あらかじめ選択肢が決まっている場合は、TextChoices
を使ってドロップダウンリストなどの選択フィールドを作成できます。
from django.db import models
class Gender(models.TextChoices):
MALE = "M", "男性"
FEMALE = "F", "女性"
class Person(models.Model):
name = models.CharField(max_length=255)
gender = models.CharField(max_length=1, choices=Gender.choices)
RichTextField
RichTextField
は、CKEditorなどのWYSIWYGエディタを使って書式付きテキストを保存できるフィールドです。
from django.contrib.richtext.fields import RichTextField
class BlogPost(models.Model):
title = models.CharField(max_length=255)
content = RichTextField()
FileField
画像やファイルなどのバイナリデータを保存する場合は、FileField
を使用します。
from django.db import models
class Document(models.Model):
name = models.CharField(max_length=255)
file = models.FileField()
これらの方法は、それぞれ異なる用途に適しています。
CharField
とTextField
は、Djangoで文字列データを保存する際に最もよく使われるフィールドです。
sql django database