def filter(request): if request.method == "POST": minAge = request.POST['minAge'] maxAge = request.POST['maxAge'] gender = request.POST['gender'] filteredList = [] usersAge = [] user = User.objects.get(username=request.session['username']) users = User.objects.exclude(username=user.username) for x in users: userDetails = User.objects.filter(username=x) usersAge.append(calculate_age(x.dob)) counter = 0 current = dt.now() if (minAge != ""): min_date = date(current.year - int(minAge), current.month, current.day) if (maxAge != ""): max_date = date(current.year - int(maxAge), current.month, current.day) if ((gender == "Both") & (minAge == "") & (maxAge == "")): #Get everyone but current user filteredUsers = User.objects.exclude(username=user.username) elif ((gender != "Both") & (minAge == "") & (maxAge == "")): #Get all the chosen gender excluding current user filteredUsers = User.objects.filter(gender=gender).exclude( username=user.username) elif ((gender == "Both") & (minAge != "") & (maxAge == "")): #Get all users older than min age exlcuding current user filteredUsers = User.objects.filter(dob__lte=min_date).exclude( username=user.username) elif ((gender == "Both") & (minAge == "") & (maxAge != "")): #Get all users less than max age exlcuding current user filteredUsers = User.objects.filter(dob__gte=max_date).exclude( username=user.username) elif ((gender != "Both") & (minAge != "") & (maxAge == "")): #Get all users older than min age and of selected gender exlcuding current user filteredUsers = User.objects.filter( dob__lte=min_date, gender=gender).exclude(username=user.username) elif ((gender != "Both") & (minAge == "") & (maxAge != "")): #Get all users less than max age and of selected gender exlcuding current user filteredUsers = User.objects.filter( dob__gte=max_date, gender=gender).exclude(username=user.username) elif ((gender == "Both") & (minAge != "") & (maxAge != "")): #Get users between max and min age excluding current user filteredUsers = User.objects.filter( dob__gte=max_date, dob__lte=min_date).exclude(username=user.username) else: #Get users between max and min age excluding current user filteredUsers = User.objects.filter( dob__gte=max_date, dob__lte=min_date, gender=gender).exclude(username=user.username) if not filteredUsers: message = "There are no users that satsify your requirements" return JsonResponse({ 'status': 'false', 'message': message }, status=500) else: count = 0 ranks = [0] filteredUsersNames = [""] filteredUsersEmails = [""] iterator = 0 for x in filteredUsers: filteredUsersNames[iterator] = x.username count = count + 1 for k in user.hobby.all(): for i in x.hobby.all(): if (k == i): ranks[iterator] = ranks[iterator] + 1 else: ranks[iterator] = ranks[iterator] + 0 if (count != len(filteredUsers)): iterator = iterator + 1 ranks.append(0) filteredUsersNames.append("") ranks, filteredUsersNames = zip( *sorted(zip(ranks, filteredUsersNames), reverse=True)) ranks, filteredUsersNames = (list(t) for t in zip( *sorted(zip(ranks, filteredUsersNames), reverse=True))) all_users_ranked_list = [] for x in filteredUsersNames: all_users_ranked_list.append(User.objects.get(username=x)) filteredUsersEmails.append( (User.objects.get(username=x)).email) results = [User.as_json() for User in all_users_ranked_list] jsonUser = user.username json = {'users': results, 'curUser': jsonUser} return JsonResponse(json)