Allow to refresh existing Models fields from database. Performs refresh of the related models fields. By default, loads only self and the directly related ones. If follow=True is set it loads also related models of related models. To not get stuck in an in
(
self: T,
follow: bool = False,
exclude: Union[list, str, set, dict, None] = None,
order_by: Union[list, str, None] = None,
)
| 365 | return self |
| 366 | |
| 367 | async def load_all( |
| 368 | self: T, |
| 369 | follow: bool = False, |
| 370 | exclude: Union[list, str, set, dict, None] = None, |
| 371 | order_by: Union[list, str, None] = None, |
| 372 | ) -> T: |
| 373 | """ |
| 374 | Allow to refresh existing Models fields from database. |
| 375 | Performs refresh of the related models fields. |
| 376 | |
| 377 | By default, loads only self and the directly related ones. |
| 378 | |
| 379 | If follow=True is set it loads also related models of related models. |
| 380 | |
| 381 | To not get stuck in an infinite loop as related models also keep a relation |
| 382 | to parent model visited models set is kept. |
| 383 | |
| 384 | That way already visited models that are nested are loaded, but the load do not |
| 385 | follow them inside. So Model A -> Model B -> Model C -> Model A -> Model X |
| 386 | will load second Model A but will never follow into Model X. |
| 387 | Nested relations of those kind need to be loaded manually. |
| 388 | |
| 389 | :param order_by: columns by which models should be sorted |
| 390 | :type order_by: Union[list, str] |
| 391 | :raises NoMatch: If given pk is not found in database. |
| 392 | |
| 393 | :param exclude: related models to exclude |
| 394 | :type exclude: Union[list, str, set, dict] |
| 395 | :param follow: flag to trigger deep save - |
| 396 | by default only directly related models are saved |
| 397 | with follow=True also related models of related models are saved |
| 398 | :type follow: bool |
| 399 | :return: reloaded Model |
| 400 | :rtype: Model |
| 401 | """ |
| 402 | relations = list(self.extract_related_names()) |
| 403 | if follow: |
| 404 | relations = self._iterate_related_models() |
| 405 | queryset = self.__class__.objects |
| 406 | if exclude: |
| 407 | queryset = queryset.exclude_fields(exclude) |
| 408 | if order_by: |
| 409 | queryset = queryset.order_by(order_by) |
| 410 | instance = await queryset.select_related(relations).get(pk=self.pk) |
| 411 | self._orm.clear() |
| 412 | self.update_from_dict(instance.model_dump()) |
| 413 | self.__setattr_fields__.clear() |
| 414 | return self |