mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-29 20:44:24 +00:00
72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.db import models
|
|
from django.http import JsonResponse
|
|
from django.core import serializers
|
|
from django.db.models import Q
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
import os
|
|
import json
|
|
from itertools import chain
|
|
|
|
from core.models import User
|
|
from club.models import Club
|
|
|
|
def index(request, context=None):
|
|
return render(request, "core/index.jinja")
|
|
|
|
def search_user(query, as_json=False):
|
|
users = []
|
|
if query:
|
|
exact_nick = User.objects.filter(nick_name__iexact=query).all()
|
|
nicks = User.objects.filter(nick_name__icontains=query).exclude(id__in=exact_nick).all()
|
|
users = User.objects.filter(Q(first_name__icontains=query) |
|
|
Q(last_name__icontains=query)).exclude(id__in=exact_nick).exclude(id__in=nicks).all()
|
|
nicks = nicks[:5]
|
|
users = users[:5]
|
|
if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers
|
|
exact_nick = json.loads(serializers.serialize('json', exact_nick, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
|
|
nicks = json.loads(serializers.serialize('json', nicks, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
|
|
users = json.loads(serializers.serialize('json', users, fields=('nick_name', 'last_name', 'first_name', 'profile_pict')))
|
|
else:
|
|
exact_nick = list(exact_nick)
|
|
nicks = list(nicks)
|
|
users = list(users)
|
|
users = exact_nick + nicks + users
|
|
return users
|
|
|
|
def search_club(query, as_json=False):
|
|
clubs = []
|
|
if query:
|
|
clubs = Club.objects.filter(name__icontains=query).all()
|
|
clubs = clubs[:5]
|
|
if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers
|
|
clubs = json.loads(serializers.serialize('json', clubs, fields=('name')))
|
|
else:
|
|
clubs = list(clubs)
|
|
return clubs
|
|
|
|
@login_required
|
|
def search_view(request):
|
|
result = {
|
|
'users': search_user(request.GET.get('query', '')),
|
|
'clubs': search_club(request.GET.get('query', '')),
|
|
}
|
|
return render(request, "core/search.jinja", context={'result': result})
|
|
|
|
@login_required
|
|
def search_user_json(request):
|
|
result = {
|
|
'users': search_user(request.GET.get('query', ''), True),
|
|
}
|
|
return JsonResponse(result)
|
|
|
|
@login_required
|
|
def search_json(request):
|
|
result = {
|
|
'users': search_user(request.GET.get('query', ''), True),
|
|
'clubs': search_club(request.GET.get('query', ''), True),
|
|
}
|
|
return JsonResponse(result)
|
|
|