Handle each field on an object (except for ForeignKeys and ManyToManyFields).
(self, obj, field)
| 74 | self.indent_level -= 1 |
| 75 | |
| 76 | def handle_field(self, obj, field): |
| 77 | """ |
| 78 | Handle each field on an object (except for ForeignKeys and |
| 79 | ManyToManyFields). |
| 80 | """ |
| 81 | self.indent_level += 1 |
| 82 | self.indent(self.indent_level) |
| 83 | self.xml.startElement( |
| 84 | "field", |
| 85 | { |
| 86 | "name": field.name, |
| 87 | "type": field.get_internal_type(), |
| 88 | }, |
| 89 | ) |
| 90 | |
| 91 | # Get a "string version" of the object's data. |
| 92 | if getattr(obj, field.name) is not None: |
| 93 | value = field.value_to_string(obj) |
| 94 | if field.get_internal_type() == "JSONField": |
| 95 | # Dump value since JSONField.value_to_string() doesn't output |
| 96 | # strings. |
| 97 | value = json.dumps(value, cls=field.encoder) |
| 98 | try: |
| 99 | self.xml.characters(value) |
| 100 | except UnserializableContentError: |
| 101 | raise ValueError( |
| 102 | "%s.%s (pk:%s) contains unserializable characters" |
| 103 | % (obj.__class__.__name__, field.name, obj.pk) |
| 104 | ) |
| 105 | else: |
| 106 | self.xml.addQuickElement("None") |
| 107 | |
| 108 | self.xml.endElement("field") |
| 109 | self.indent_level -= 1 |
| 110 | |
| 111 | def handle_fk_field(self, obj, field): |
| 112 | """ |
nothing calls this directly
no test coverage detected