Using _get_changed_fields iterate and remove any fields that are marked as changed.
(self)
| 546 | remove(field) |
| 547 | |
| 548 | def _clear_changed_fields(self): |
| 549 | """Using _get_changed_fields iterate and remove any fields that |
| 550 | are marked as changed. |
| 551 | """ |
| 552 | ReferenceField = _import_class("ReferenceField") |
| 553 | GenericReferenceField = _import_class("GenericReferenceField") |
| 554 | |
| 555 | for changed in self._get_changed_fields(): |
| 556 | parts = changed.split(".") |
| 557 | data = self |
| 558 | for part in parts: |
| 559 | if isinstance(data, list): |
| 560 | try: |
| 561 | data = data[int(part)] |
| 562 | except IndexError: |
| 563 | data = None |
| 564 | elif isinstance(data, dict): |
| 565 | data = data.get(part, None) |
| 566 | else: |
| 567 | field_name = data._reverse_db_field_map.get(part, part) |
| 568 | data = getattr(data, field_name, None) |
| 569 | |
| 570 | if not isinstance(data, LazyReference) and hasattr( |
| 571 | data, "_changed_fields" |
| 572 | ): |
| 573 | if getattr(data, "_is_document", False): |
| 574 | continue |
| 575 | |
| 576 | data._changed_fields = [] |
| 577 | elif isinstance(data, (list, tuple, dict)): |
| 578 | if hasattr(data, "field") and isinstance( |
| 579 | data.field, (ReferenceField, GenericReferenceField) |
| 580 | ): |
| 581 | continue |
| 582 | BaseDocument._nestable_types_clear_changed_fields(data) |
| 583 | |
| 584 | self._changed_fields = [] |
| 585 | |
| 586 | @staticmethod |
| 587 | def _nestable_types_clear_changed_fields(data): |