@@ -60,6 +60,7 @@ class _FromFieldInfoInputs(typing_extensions.TypedDict, total=False):
60
60
description : str | None
61
61
examples : list [Any ] | None
62
62
exclude : bool | None
63
+ exclude_if : Callable [[Any ], bool ] | None
63
64
gt : annotated_types .SupportsGt | None
64
65
ge : annotated_types .SupportsGe | None
65
66
lt : annotated_types .SupportsLt | None
@@ -116,6 +117,7 @@ class FieldInfo(_repr.Representation):
116
117
description: The description of the field.
117
118
examples: List of examples of the field.
118
119
exclude: Whether to exclude the field from the model serialization.
120
+ exclude_if: Callable that determines whether to exclude a field during serialization based on its value.
119
121
discriminator: Field name or Discriminator for discriminating the type in a tagged union.
120
122
deprecated: A deprecation message, an instance of `warnings.deprecated` or the `typing_extensions.deprecated` backport,
121
123
or a boolean. If `True`, a default deprecation message will be emitted when accessing the field.
@@ -141,6 +143,7 @@ class FieldInfo(_repr.Representation):
141
143
description : str | None
142
144
examples : list [Any ] | None
143
145
exclude : bool | None
146
+ exclude_if : Callable [[Any ], bool ] | None
144
147
discriminator : str | types .Discriminator | None
145
148
deprecated : Deprecated | str | bool | None
146
149
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None
@@ -166,6 +169,7 @@ class FieldInfo(_repr.Representation):
166
169
'description' ,
167
170
'examples' ,
168
171
'exclude' ,
172
+ 'exclude_if' ,
169
173
'discriminator' ,
170
174
'deprecated' ,
171
175
'json_schema_extra' ,
@@ -235,6 +239,7 @@ def __init__(self, **kwargs: Unpack[_FieldInfoInputs]) -> None:
235
239
self .description = kwargs .pop ('description' , None )
236
240
self .examples = kwargs .pop ('examples' , None )
237
241
self .exclude = kwargs .pop ('exclude' , None )
242
+ self .exclude_if = kwargs .pop ('exclude_if' , None )
238
243
self .discriminator = kwargs .pop ('discriminator' , None )
239
244
# For compatibility with FastAPI<=0.110.0, we preserve the existing value if it is not overridden
240
245
self .deprecated = kwargs .pop ('deprecated' , getattr (self , 'deprecated' , None ))
@@ -703,6 +708,7 @@ class _EmptyKwargs(typing_extensions.TypedDict):
703
708
'description' : None ,
704
709
'examples' : None ,
705
710
'exclude' : None ,
711
+ 'exclude_if' : None ,
706
712
'discriminator' : None ,
707
713
'json_schema_extra' : None ,
708
714
'frozen' : None ,
@@ -745,6 +751,7 @@ def Field(
745
751
description : str | None = _Unset ,
746
752
examples : list [Any ] | None = _Unset ,
747
753
exclude : bool | None = _Unset ,
754
+ exclude_if : Callable [[Any ], bool ] | None = _Unset ,
748
755
discriminator : str | types .Discriminator | None = _Unset ,
749
756
deprecated : Deprecated | str | bool | None = _Unset ,
750
757
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None = _Unset ,
@@ -784,6 +791,7 @@ def Field(
784
791
description : str | None = _Unset ,
785
792
examples : list [Any ] | None = _Unset ,
786
793
exclude : bool | None = _Unset ,
794
+ exclude_if : Callable [[Any ], bool ] | None = _Unset ,
787
795
discriminator : str | types .Discriminator | None = _Unset ,
788
796
deprecated : Deprecated | str | bool | None = _Unset ,
789
797
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None = _Unset ,
@@ -823,6 +831,7 @@ def Field(
823
831
description : str | None = _Unset ,
824
832
examples : list [Any ] | None = _Unset ,
825
833
exclude : bool | None = _Unset ,
834
+ exclude_if : Callable [[Any ], bool ] | None = _Unset ,
826
835
discriminator : str | types .Discriminator | None = _Unset ,
827
836
deprecated : Deprecated | str | bool | None = _Unset ,
828
837
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None = _Unset ,
@@ -861,6 +870,7 @@ def Field( # No default set
861
870
description : str | None = _Unset ,
862
871
examples : list [Any ] | None = _Unset ,
863
872
exclude : bool | None = _Unset ,
873
+ exclude_if : Callable [[Any ], bool ] | None = _Unset ,
864
874
discriminator : str | types .Discriminator | None = _Unset ,
865
875
deprecated : Deprecated | str | bool | None = _Unset ,
866
876
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None = _Unset ,
@@ -900,6 +910,7 @@ def Field( # noqa: C901
900
910
description : str | None = _Unset ,
901
911
examples : list [Any ] | None = _Unset ,
902
912
exclude : bool | None = _Unset ,
913
+ exclude_if : Callable [[Any ], bool ] | None = _Unset ,
903
914
discriminator : str | types .Discriminator | None = _Unset ,
904
915
deprecated : Deprecated | str | bool | None = _Unset ,
905
916
json_schema_extra : JsonDict | Callable [[JsonDict ], None ] | None = _Unset ,
@@ -950,6 +961,7 @@ def Field( # noqa: C901
950
961
description: Human-readable description.
951
962
examples: Example values for this field.
952
963
exclude: Whether to exclude the field from the model serialization.
964
+ exclude_if: Callable that determines whether to exclude a field during serialization based on its value.
953
965
discriminator: Field name or Discriminator for discriminating the type in a tagged union.
954
966
deprecated: A deprecation message, an instance of `warnings.deprecated` or the `typing_extensions.deprecated` backport,
955
967
or a boolean. If `True`, a default deprecation message will be emitted when accessing the field.
@@ -1067,6 +1079,7 @@ def Field( # noqa: C901
1067
1079
description = description ,
1068
1080
examples = examples ,
1069
1081
exclude = exclude ,
1082
+ exclude_if = exclude_if ,
1070
1083
discriminator = discriminator ,
1071
1084
deprecated = deprecated ,
1072
1085
json_schema_extra = json_schema_extra ,
0 commit comments