|
1 | 1 | # Copyright (C) 2019 o.s. Auto*Mat
|
2 | 2 | from django.utils import timezone
|
3 |
| -import json |
4 | 3 |
|
5 | 4 | from author.decorators import with_author
|
6 | 5 |
|
@@ -74,8 +73,8 @@ def __init__(self, *args, **kwargs):
|
74 | 73 | blank=True,
|
75 | 74 | )
|
76 | 75 |
|
77 |
| - queryset = models.TextField( |
78 |
| - verbose_name=_("JSON list of pks to export"), |
| 76 | + queryset = models.JSONField( |
| 77 | + verbose_name=_("JSON list of pks to export or dict of queryset filters"), |
79 | 78 | null=False,
|
80 | 79 | )
|
81 | 80 |
|
@@ -111,14 +110,19 @@ def get_content_type(self):
|
111 | 110 | return self._content_type
|
112 | 111 |
|
113 | 112 | def get_queryset(self):
|
114 |
| - pks = json.loads(self.queryset) |
| 113 | + queryset_spec = self.queryset |
| 114 | + if isinstance(queryset_spec, list): |
| 115 | + filters = {"pk__in": queryset_spec} |
| 116 | + elif isinstance(queryset_spec, dict): |
| 117 | + filters = queryset_spec |
| 118 | + |
115 | 119 | # If customised queryset for the model exists
|
116 | 120 | # then it'll apply filter on that otherwise it'll
|
117 | 121 | # apply filter directly on the model.
|
118 | 122 | resource_class = self.get_resource_class()
|
119 | 123 | if hasattr(resource_class, "get_export_queryset"):
|
120 |
| - return resource_class(**self.resource_kwargs).get_export_queryset().filter(pk__in=pks) |
121 |
| - return self.get_content_type().model_class().objects.filter(pk__in=pks) |
| 124 | + return resource_class(**self.resource_kwargs).get_export_queryset().filter(**filters) |
| 125 | + return self.get_content_type().model_class().objects.filter(**filters) |
122 | 126 |
|
123 | 127 | def get_resource_choices(self):
|
124 | 128 | return [
|
|
0 commit comments