| 202 | self.edges.setdefault(source, []).append(target) |
| 203 | |
| 204 | def collect(self, objs, source=None, source_attr=None, **kwargs): |
| 205 | for obj in objs: |
| 206 | if source_attr and not source_attr.endswith("+"): |
| 207 | related_name = source_attr % { |
| 208 | "class": source._meta.model_name, |
| 209 | "app_label": source._meta.app_label, |
| 210 | } |
| 211 | self.add_edge(getattr(obj, related_name), obj) |
| 212 | else: |
| 213 | self.add_edge(None, obj) |
| 214 | self.model_objs[obj._meta.model].add(obj) |
| 215 | try: |
| 216 | return super().collect(objs, source_attr=source_attr, **kwargs) |
| 217 | except models.ProtectedError as e: |
| 218 | self.protected.update(e.protected_objects) |
| 219 | except models.RestrictedError as e: |
| 220 | self.protected.update(e.restricted_objects) |
| 221 | |
| 222 | def related_objects(self, related_model, related_fields, objs): |
| 223 | qs = super().related_objects(related_model, related_fields, objs) |