| 1198 | |
| 1199 | |
| 1200 | class BooleanField(Field): |
| 1201 | empty_strings_allowed = False |
| 1202 | default_error_messages = { |
| 1203 | "invalid": _("“%(value)s” value must be either True or False."), |
| 1204 | "invalid_nullable": _("“%(value)s” value must be either True, False, or None."), |
| 1205 | } |
| 1206 | description = _("Boolean (Either True or False)") |
| 1207 | |
| 1208 | def get_internal_type(self): |
| 1209 | return "BooleanField" |
| 1210 | |
| 1211 | def to_python(self, value): |
| 1212 | if self.null and value in self.empty_values: |
| 1213 | return None |
| 1214 | if value in (True, False): |
| 1215 | # 1/0 are equal to True/False. bool() converts former to latter. |
| 1216 | return bool(value) |
| 1217 | if value in ("t", "True", "1"): |
| 1218 | return True |
| 1219 | if value in ("f", "False", "0"): |
| 1220 | return False |
| 1221 | raise exceptions.ValidationError( |
| 1222 | self.error_messages["invalid_nullable" if self.null else "invalid"], |
| 1223 | code="invalid", |
| 1224 | params={"value": value}, |
| 1225 | ) |
| 1226 | |
| 1227 | def get_prep_value(self, value): |
| 1228 | value = super().get_prep_value(value) |
| 1229 | if value is None: |
| 1230 | return None |
| 1231 | return self.to_python(value) |
| 1232 | |
| 1233 | def formfield(self, **kwargs): |
| 1234 | if self.choices is not None: |
| 1235 | include_blank = not (self.has_default() or "initial" in kwargs) |
| 1236 | defaults = {"choices": self.get_choices(include_blank=include_blank)} |
| 1237 | else: |
| 1238 | form_class = forms.NullBooleanField if self.null else forms.BooleanField |
| 1239 | # In HTML checkboxes, 'required' means "must be checked" which is |
| 1240 | # different from the choices case ("must select some value"). |
| 1241 | # required=False allows unchecked checkboxes. |
| 1242 | defaults = {"form_class": form_class, "required": False} |
| 1243 | return super().formfield(**{**defaults, **kwargs}) |
| 1244 | |
| 1245 | |
| 1246 | class CharField(Field): |
no outgoing calls