QuerySet for Task model with Data Manager filters and ordering support.
| 499 | |
| 500 | |
| 501 | class TaskQuerySet(FSMStateQuerySetMixin, models.QuerySet): |
| 502 | """QuerySet for Task model with Data Manager filters and ordering support.""" |
| 503 | |
| 504 | def prepared(self, prepare_params=None): |
| 505 | """Apply filters, ordering and selected items to queryset |
| 506 | |
| 507 | :param prepare_params: prepare params with project, filters, orderings, etc |
| 508 | :return: ordered and filtered queryset |
| 509 | |
| 510 | Note: For multi-project queries, filters and ordering will use the first project's |
| 511 | configuration (label config, custom fields, etc.). This is backwards compatible |
| 512 | with single-project queries. |
| 513 | """ |
| 514 | from projects.models import Project |
| 515 | |
| 516 | queryset = self |
| 517 | |
| 518 | if prepare_params is None: |
| 519 | return queryset |
| 520 | |
| 521 | # Get the project for filter/ordering configuration |
| 522 | # For multi-project queries, use the first project's configuration |
| 523 | if prepare_params.is_multi_project: |
| 524 | project = Project.objects.get(pk=prepare_params.projects[0]) |
| 525 | else: |
| 526 | # Backwards compatible: prepare_params.project is an int |
| 527 | project = Project.objects.get(pk=prepare_params.project) |
| 528 | |
| 529 | request = prepare_params.request |
| 530 | queryset = apply_filters(queryset, prepare_params.filters, project, request) |
| 531 | queryset = apply_ordering(queryset, prepare_params.ordering, project, request, view_data=prepare_params.data) |
| 532 | |
| 533 | if not prepare_params.selectedItems: |
| 534 | return queryset |
| 535 | |
| 536 | # included selected items |
| 537 | if prepare_params.selectedItems.all is False and prepare_params.selectedItems.included: |
| 538 | queryset = queryset.filter(id__in=prepare_params.selectedItems.included) |
| 539 | |
| 540 | # excluded selected items |
| 541 | elif prepare_params.selectedItems.all is True and prepare_params.selectedItems.excluded: |
| 542 | queryset = queryset.exclude(id__in=prepare_params.selectedItems.excluded) |
| 543 | |
| 544 | return queryset |
| 545 | |
| 546 | |
| 547 | class GroupConcat(Aggregate): |
no outgoing calls
no test coverage detected