54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
from django.shortcuts import render, get_object_or_404
|
|
|
|
from zoo.models import EntitySchema, Entity
|
|
|
|
from .forms import EntitySearchForm
|
|
|
|
|
|
def schemas(request):
|
|
'''Show all schemas and give link to search page'''
|
|
return render(request, 'zoo_demo/schemas.html', {
|
|
'schemas': EntitySchema.objects.all(),
|
|
})
|
|
|
|
|
|
def schema(request, name):
|
|
'''Display a search form for the targeted schema'''
|
|
schema = get_object_or_404(EntitySchema, name=name)
|
|
qs = Entity.objects.filter(schema=schema)
|
|
form = EntitySearchForm(schema=schema, data=request.GET)
|
|
if form.is_valid():
|
|
qs = form.search()
|
|
else:
|
|
qs = Entity.objects.none()
|
|
try:
|
|
page = int(request.GET.get('page', 0))
|
|
except ValueError:
|
|
page = 0
|
|
qs = qs[page * 10:(page + 1) * 10]
|
|
next_page = page + 1
|
|
if len(qs) < 10:
|
|
next_page = None
|
|
return render(request, 'zoo_demo/schema.html', {
|
|
'schema': schema,
|
|
'form': form,
|
|
'entities': qs,
|
|
'next_page': next_page,
|
|
'previous_page': page - 1,
|
|
})
|
|
|
|
|
|
def doublons(request, name):
|
|
'''Display potential doublons'''
|
|
schema = get_object_or_404(EntitySchema, name=name)
|
|
paths = [key.split('__') for key in request.GET]
|
|
|
|
if paths:
|
|
doublons = Entity.objects.doublons(schema, *paths)
|
|
else:
|
|
doublons = []
|
|
return render(request, 'zoo_demo/doublons.html', {
|
|
'schema': schema,
|
|
'doublons': doublons,
|
|
})
|