def __get_create_kargs(request): kargs = {} score_result_fields = ScoreResult.get_fields() for field_name in score_result_fields: if field_name not in request.POST: kargs[field_name] = score_result_fields[field_name].default else: kargs[field_name] = request.POST[field_name] return kargs
def search_page(request): def __get_annotate_args(score_result_field): if score_result_field.metric_type == "Average": return score_result_field.display_name, Avg('scoreresult__' + score_result_field.field_name) else: return score_result_field.display_name, Sum('scoreresult__' + score_result_field.field_name) def __get_filter_args(score_result_field, sign, value): django_value = "" if sign == '>=': django_value = "__gte" if sign == '<=': django_value = "__lte" return "%s%s" % (display_name, django_value), value context = {} # This would imply that they were on the search page, and made a request if len(request.GET) != 0: context['get'] = request.GET annotate_args = {} filter_args = {} good_fields = [] valid_fields = [] for score_result_field in ScoreResult.get_fields().values(): field_name = score_result_field.field_name value_key = field_name + "_value" if field_name in request.GET and value_key in request.GET: value = request.GET[field_name] sign = request.GET[value_key] if len(value) != 0 and len(sign) != 0: valid_fields.append(score_result_field) display_name = score_result_field.display_name annotate = __get_annotate_args(score_result_field) filter_arg = __get_filter_args(score_result_field, sign, value) annotate_args[annotate[0]] = annotate[1] filter_args[filter_arg[0]] = filter_arg[1] good_fields.append(score_result_field) # search_results = Team.objects.all().annotate(**annotate_args).filter(**filter_args) # results = [] for result in search_results: team_result = [] team_result.append(("Team Number", result.teamNumber)) for field in good_fields: value = getattr(result, field.display_name) if field.metric_type == "Average": value = "{:10.2f}".format(value) team_result.append((field.display_name, value)) results.append(team_result) context['results'] = results return render(request, 'Scouting2011/search.html', context)