summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-06 20:22:55 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-06 20:22:55 +0200
commit821961208036c05310f65a94d740cca38436e7eb (patch)
tree1e4e3653789d36146acc02cc5838ac54f95a2e28 /archaeological_finds
parente05ed38b423957d0a6a842c62cb29b6b77cd611d (diff)
downloadIshtar-821961208036c05310f65a94d740cca38436e7eb.tar.bz2
Ishtar-821961208036c05310f65a94d740cca38436e7eb.zip
Serialization: warehouse filter
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/models_finds.py7
-rw-r--r--archaeological_finds/serializers.py35
2 files changed, 37 insertions, 5 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 3dda2cdda..6914ff019 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -1493,12 +1493,11 @@ class Find(BulkUpdatedItem, ValueGetter, DocumentItem, BaseHistorizedItem,
datings = models.ManyToManyField(Dating, verbose_name=_(u"Dating"),
related_name='find')
container = models.ForeignKey(
- "archaeological_warehouse.Container", verbose_name=_(u"Container"),
- blank=True, null=True,
- related_name='finds', on_delete=models.SET_NULL)
+ "archaeological_warehouse.Container", verbose_name=_("Container"),
+ blank=True, null=True, related_name='finds', on_delete=models.SET_NULL)
container_ref = models.ForeignKey(
"archaeological_warehouse.Container",
- verbose_name=_(u"Reference container"),
+ verbose_name=_("Reference container"),
blank=True, null=True,
related_name='finds_ref', on_delete=models.SET_NULL)
is_complete = models.NullBooleanField(_(u"Is complete?"), blank=True,
diff --git a/archaeological_finds/serializers.py b/archaeological_finds/serializers.py
index 7ce17c924..6e079f7ec 100644
--- a/archaeological_finds/serializers.py
+++ b/archaeological_finds/serializers.py
@@ -1,3 +1,5 @@
+from django.db.models import Q
+
from ishtar_common.serializers import generic_get_results, archive_serialization
from archaeological_finds import models
@@ -9,10 +11,37 @@ FIND_MODEL_LIST = [
# TODO: associated documents, property, findbasket, treatments
+def generate_warehouse_queryset(ids):
+ q_find, q_basefind = None, None
+
+ for container_key in ("container", "container_ref"):
+ for warehouse_key in ("location", "responsible"):
+ q_f = Q(**
+ {"{}__{}__id__in".format(
+ container_key, warehouse_key): ids})
+ q_bf = Q(**
+ {"find__{}__{}__id__in".format(
+ container_key, warehouse_key): ids})
+ if not q_find:
+ q_find = q_f
+ q_basefind = q_bf
+ else:
+ q_find |= q_f
+ q_basefind |= q_bf
+
+ result_queryset = {
+ models.BaseFind.__name__:
+ models.BaseFind.objects.filter(q_basefind),
+ models.Find.__name__:
+ models.Find.objects.filter(q_find),
+ }
+ return result_queryset
+
+
def find_serialization(archive=False, return_empty_types=False,
archive_name=None, operation_queryset=None,
site_queryset=None, cr_queryset=None,
- find_queryset=None):
+ find_queryset=None, warehouse_queryset=None):
result_queryset = {}
if operation_queryset:
operation_ids = operation_queryset.values_list("id", flat=True)
@@ -54,6 +83,10 @@ def find_serialization(archive=False, return_empty_types=False,
find__id__in=find_ids),
models.Find.__name__: find_queryset,
}
+ elif warehouse_queryset:
+ warehouse_ids = warehouse_queryset.values_list("id", flat=True)
+ result_queryset = generate_warehouse_queryset(warehouse_ids)
+
result = generic_get_results(FIND_MODEL_LIST, "finds",
result_queryset=result_queryset)
full_archive = archive_serialization(