Formのデータを元に短いコードで素敵にModelインスタンスを作成する
この記事では、Formの入力されたデータを元に短いコードでModelインスタンスを作成するコードについて説明します。Formで入力されたデータをサクッとDBに登録したい時に使えます。
この記事では、Formの入力されたデータを元に短いコードでModelインスタンスを作成するコードについて説明します。
Formで入力されたデータをサクッとDBに登録したい時に使えます。
この記事の内容です。
対象読者
- Formの入力されたデータを元に短いコードでModelインスタンスを作成したい方
環境
- Django (version 4.1.2, 3.2.16)
前提条件
なし
Formの入力されたデータを元に短いコードでModelインスタンスを作成
簡単に説明すると、以下のステップで処理を行う。
- POSTデータを元にFormインスタンス作成
- Formインスタンスをdictに変換、展開しModelのコンストラクタへ渡しModelのインスタンス作成
1. Formクラスにdict変換用処理実装
from django import forms
# 共通処理として使用するためにベースクラスを作成し、
# それを継承させた方が楽。
class BaseModelForm(forms.ModelForm):
# これを追加することでdict()でdictに変換できる。
def __iter__(self):
for k in self.fields:
yield (k, self.data[k])
class HogeForm(forms.ModelForm):
# 省略
2. Formインスタンスを元にModelインスタンス作成
from django.views import generic
from .forms import HogeForm
from .models import Hoge
class TestView(generic.TemplateView):
def post(self, request, *args, **kwargs):
hoge_form = HogeForm(data=request.POST)
# 任意の何かしらの処理
hoge = Hoge(**dict(hoge_form))
# 以降はhoge.save()など、ご自由に