52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
from django.http import JsonResponse
|
|
from django.shortcuts import render
|
|
|
|
from .models import PortfolioEntry, Region
|
|
|
|
|
|
def home(request):
|
|
return render(request, "showcase/home.html")
|
|
|
|
|
|
def _serialize_entry(entry):
|
|
return {
|
|
"id": entry.id,
|
|
"type": entry.entry_type,
|
|
"title": entry.title,
|
|
"organization": entry.organization,
|
|
"startDate": entry.start_date.isoformat() if entry.start_date else None,
|
|
"endDate": entry.end_date.isoformat() if entry.end_date else None,
|
|
"summary": entry.summary,
|
|
"url": entry.url,
|
|
}
|
|
|
|
|
|
def map_regions(request):
|
|
entries = PortfolioEntry.objects.filter(is_published=True).prefetch_related("regions")
|
|
entries_by_region = {}
|
|
for entry in entries:
|
|
payload = _serialize_entry(entry)
|
|
for region in entry.regions.all():
|
|
entries_by_region.setdefault(region.code, {})[entry.id] = payload
|
|
|
|
regions = list(Region.objects.select_related("parent").prefetch_related("subdivisions"))
|
|
payload = []
|
|
for region in regions:
|
|
related = dict(entries_by_region.get(region.code, {}))
|
|
if region.level == Region.Level.COUNTRY:
|
|
for subdivision in region.subdivisions.all():
|
|
related.update(entries_by_region.get(subdivision.code, {}))
|
|
|
|
payload.append(
|
|
{
|
|
"code": region.code,
|
|
"name": region.name,
|
|
"level": region.level,
|
|
"parentCode": region.parent_id,
|
|
"entries": list(related.values()),
|
|
}
|
|
)
|
|
|
|
return JsonResponse({"regions": payload})
|
|
|