Pydantic ConfigDict を使います*1.allow
, forbid
, ignore
から選択します.
pydantic.Extra.forbid
や Config
class を使用する方法もありましたが,Pydantic 2.x では奨励されていません.
動作確認のための unittest は以下の通りです.モデルに text
フィールドを定義しましたが,extra_text
フィールドは定義していません.これを追加しようとしたときの挙動を確認します.
test.py
import unittest from pydantic import BaseModel, ConfigDict, ValidationError class ExtraDefaultModel(BaseModel): text: str class ExtraForbidModel(BaseModel): model_config = ConfigDict(extra="forbid") text: str class ExtraAllowModel(BaseModel): model_config = ConfigDict(extra="allow") text: str class ModelTest(unittest.TestCase): d = {"text": "banana", "extra_text": 1} def test_extra_default(self): model = ExtraDefaultModel(**self.d) self.assertDictEqual(model.model_dump(), {"text": "banana"}) def test_extra_forbid(self): with self.assertRaises(ValidationError): ExtraForbidModel(**self.d) def test_extra_allow(self): model = ExtraAllowModel(**self.d) self.assertDictEqual(model.model_dump(), {"text": "banana", "extra_text": 1})
結果は以下の通り問題ありませんでした.
... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
*1:Whether to ignore, allow, or forbid extra attributes during model initialization. https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.extra