Koki's personal blog

Koki's personal blog

Another fine, responsive site template by HTML5 UP.

Formのデータを元に短いコードで素敵にModelインスタンスを作成する

この記事では、Formの入力されたデータを元に短いコードでModelインスタンスを作成するコードについて説明します。Formで入力されたデータをサクッとDBに登録したい時に使えます。

Koki

2 分で読めます

この記事では、Formの入力されたデータを元に短いコードでModelインスタンスを作成するコードについて説明します。
Formで入力されたデータをサクッとDBに登録したい時に使えます。

この記事の内容です。

対象読者

  • Formの入力されたデータを元に短いコードでModelインスタンスを作成したい方

環境

  • Django (version 4.1.2, 3.2.16)

前提条件

なし

Formの入力されたデータを元に短いコードでModelインスタンスを作成

簡単に説明すると、以下のステップで処理を行う。

  1. POSTデータを元にFormインスタンス作成
  2. 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()など、ご自由に

最近の投稿

カテゴリー