added objects related statistic in Collection backoffice serializer
This commit is contained in:
parent
bdb82d0fb0
commit
8af8cf92e9
|
|
@ -87,6 +87,42 @@ class Collection(ProjectBaseMixin, CollectionDateMixin,
|
||||||
verbose_name = _('collection')
|
verbose_name = _('collection')
|
||||||
verbose_name_plural = _('collections')
|
verbose_name_plural = _('collections')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _related_objects(self) -> list:
|
||||||
|
"""Return list of related objects."""
|
||||||
|
related_objects = []
|
||||||
|
# get related objects
|
||||||
|
for related_object in self._meta.related_objects:
|
||||||
|
related_objects.append(related_object)
|
||||||
|
return related_objects
|
||||||
|
|
||||||
|
@property
|
||||||
|
def count_related_objects(self) -> int:
|
||||||
|
"""Return count of related objects."""
|
||||||
|
counter = 0
|
||||||
|
# count of related objects
|
||||||
|
for related_object in [related_object.name for related_object in self._related_objects]:
|
||||||
|
counter += getattr(self, f'{related_object}').count()
|
||||||
|
return counter
|
||||||
|
|
||||||
|
@property
|
||||||
|
def related_object_names(self) -> list:
|
||||||
|
"""Return related object names."""
|
||||||
|
raw_object_names = []
|
||||||
|
for related_object in [related_object.name for related_object in self._related_objects]:
|
||||||
|
instances = getattr(self, f'{related_object}')
|
||||||
|
if instances.exists():
|
||||||
|
for instance in instances.all():
|
||||||
|
raw_object_names.append(instance.slug if hasattr(instance, 'slug') else None)
|
||||||
|
|
||||||
|
# parse slugs
|
||||||
|
object_names = []
|
||||||
|
re_pattern = r'[\w]+'
|
||||||
|
for raw_name in raw_object_names:
|
||||||
|
result = re.findall(re_pattern, raw_name)
|
||||||
|
if result: object_names.append(' '.join(result).capitalize())
|
||||||
|
return set(object_names)
|
||||||
|
|
||||||
|
|
||||||
class GuideTypeQuerySet(models.QuerySet):
|
class GuideTypeQuerySet(models.QuerySet):
|
||||||
"""QuerySet for model GuideType."""
|
"""QuerySet for model GuideType."""
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ class CollectionBackOfficeSerializer(CollectionBaseSerializer):
|
||||||
collection_type_display = serializers.CharField(
|
collection_type_display = serializers.CharField(
|
||||||
source='get_collection_type_display', read_only=True)
|
source='get_collection_type_display', read_only=True)
|
||||||
country = CountrySimpleSerializer(read_only=True)
|
country = CountrySimpleSerializer(read_only=True)
|
||||||
|
count_related_objects = serializers.IntegerField(read_only=True)
|
||||||
|
related_object_names = serializers.ListField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Collection
|
model = models.Collection
|
||||||
|
|
@ -36,6 +38,8 @@ class CollectionBackOfficeSerializer(CollectionBaseSerializer):
|
||||||
'slug',
|
'slug',
|
||||||
'start',
|
'start',
|
||||||
'end',
|
'end',
|
||||||
|
'count_related_objects',
|
||||||
|
'related_object_names',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user