def get_queryset(self): form = self.form = ExamSearchForm(self.request.GET) form.is_valid() exams = Exam.objects.all() search_term = form.cleaned_data.get('query') if search_term: exams = exams.filter(Q(name__icontains=search_term) | Q(metadata__icontains=search_term)).distinct() author_term = form.cleaned_data.get('author') if author_term: authors = find_users(author_term) exams = exams.filter(author__in=authors).distinct() usage = form.cleaned_data.get('usage') usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: exams = exams.filter(usage_filters[usage]) only_ready_to_use = form.cleaned_data.get('only_ready_to_use') if only_ready_to_use: exams = exams.filter(current_stamp__status='ok') exams = [e for e in exams if e.can_be_viewed_by(self.request.user)] return exams
def get_queryset(self): form = self.form = QuestionSearchForm(self.request.GET) form.is_valid() questions = Question.objects.viewable_by(self.request.user) search_term = form.cleaned_data.get("query") if search_term: questions = questions.filter( Q(name__icontains=search_term) | Q(metadata__icontains=search_term) | Q(tags__name__istartswith=search_term) ).distinct() author = form.cleaned_data.get("author") if author: questions = questions.filter(author__in=find_users(author)) tags = form.cleaned_data.get("tags") if len(tags): for tag in tags: questions = questions.filter(tags__name__in=[tag]) exclude_tags = form.cleaned_data.get("exclude_tags") questions = questions.exclude(tags__name__in=exclude_tags) usage = form.cleaned_data.get("usage") usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: questions = questions.filter(usage_filters[usage]) filter_copies = form.cleaned_data.get("filter_copies") if filter_copies: questions = questions.filter(copy_of=None) only_ready_to_use = form.cleaned_data.get("only_ready_to_use") if only_ready_to_use: questions = questions.filter(current_stamp__status="ok") questions = questions.distinct() return questions
def get_queryset(self): form = self.form = ExamSearchForm(self.request.GET) form.is_valid() exams = Exam.objects.all() search_term = form.cleaned_data.get('query') if search_term: exams = exams.filter( Q(name__icontains=search_term) | Q(metadata__icontains=search_term)).distinct() author_term = form.cleaned_data.get('author') if author_term: authors = find_users(author_term) exams = exams.filter(author__in=authors).distinct() usage = form.cleaned_data.get('usage') usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: exams = exams.filter(usage_filters[usage]) only_ready_to_use = form.cleaned_data.get('only_ready_to_use') if only_ready_to_use: exams = exams.filter(current_stamp__status='ok') exams = [e for e in exams if e.can_be_viewed_by(self.request.user)] return exams
def get_queryset(self): form = self.form = QuestionSearchForm(self.request.GET) form.is_valid() questions = Question.objects.viewable_by(self.request.user) search_term = form.cleaned_data.get('query') if search_term: questions = questions.filter(Q(name__icontains=search_term) | Q(metadata__icontains=search_term) | Q(tags__name__istartswith=search_term)).distinct() author = form.cleaned_data.get('author') if author: questions = questions.filter(author__in=find_users(author)) tags = form.cleaned_data.get('tags') if len(tags): for tag in tags: questions = questions.filter(tags__name__in=[tag]) usage = form.cleaned_data.get('usage') usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: questions = questions.filter(usage_filters[usage]) filter_copies = form.cleaned_data.get('filter_copies') if filter_copies: questions = questions.filter(copy_of=None) only_ready_to_use = form.cleaned_data.get('only_ready_to_use') if only_ready_to_use: questions = questions.filter(current_stamp__status='ok') questions = questions.distinct() return questions
def get_queryset(self): data = deepcopy(self.request.GET) form = self.form = editor.forms.EditorItemSearchForm(data) for field in ('usage', 'item_types', 'order_by', 'tags'): form.data.setdefault(field, form.fields[field].initial) form.is_valid() items = self.get_viewable_items() # filter based on tags tags = self.tags = form.cleaned_data.get('tags') if tags: for tag in tags: items = items.filter(tags__name__icontains=tag) exclude_tags = self.exclude_tags = form.cleaned_data.get( 'exclude_tags') self.filter_exclude_tags = Q() if exclude_tags: for tag in exclude_tags: self.filter_exclude_tags = self.filter_exclude_tags & Q( tags__name__icontains=tag) items = items.exclude(self.filter_exclude_tags) # filter based on query query = self.query = form.cleaned_data.get('query') self.filter_query = Q() if query: words = [w for w in re.split(r'\s+', query) if w != ''] for word in words: self.filter_query = self.filter_query & ( Q(name__icontains=word) | Q(metadata__icontains=word)) items = items.filter(self.filter_query) # filter based on item type item_types = self.item_types = form.cleaned_data.get('item_types', []) if 'exams' in item_types: if 'questions' not in item_types: items = items.filter(filter_exam) elif 'questions' in item_types: items = items.filter(filter_question) # filter based on author author_term = form.cleaned_data.get('author') if author_term: authors = find_users(author_term) self.filter_authors = Q(author__in=authors) items = items.filter(self.filter_authors) else: self.filter_authors = Q() # filter based on usage usage = form.cleaned_data.get('usage') usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: self.filter_usage = usage_filters[usage] items = items.filter(self.filter_usage) else: self.filter_usage = Q() # filter based on ability level ability_levels = form.cleaned_data.get('ability_levels') if ability_levels.exists(): d = ability_levels.aggregate(Min('start'), Max('end')) start = d['start__min'] end = d['end__max'] self.filter_ability_level = Q(ability_level_start__lt=end, ability_level_end__gt=start) items = items.filter(self.filter_ability_level) else: self.filter_ability_level = Q() # filter based on status status = form.cleaned_data.get('status') if status == 'draft': self.filter_status = Q(current_stamp=None) items = items.filter(self.filter_status) elif status and status != 'any': self.filter_status = Q(current_stamp__status=status) items = items.filter(self.filter_status) else: self.filter_status = Q() # filter based on taxonomy nodes taxonomy_nodes = form.cleaned_data.get('taxonomy_nodes') if taxonomy_nodes.exists(): self.filter_taxonomy_node = Q(taxonomy_nodes__in=taxonomy_nodes) items = items.filter(self.filter_taxonomy_node).annotate( num_nodes=Count('taxonomy_nodes')).filter( num_nodes=taxonomy_nodes.count()) else: self.filter_taxonomy_node = Q() items = items.distinct() return items
def get_queryset(self): data = deepcopy(self.request.GET) form = self.form = editor.forms.EditorItemSearchForm(data) for field in ('usage','item_types','order_by','tags'): form.data.setdefault(field,form.fields[field].initial) form.is_valid() items = self.get_viewable_items() # filter based on tags tags = self.tags = form.cleaned_data.get('tags') self.filter_tags = Q() if tags: for tag in tags: self.filter_tags = self.filter_tags & Q( tags__name__icontains=tag ) items = items.filter(self.filter_tags) # filter based on query query = self.query = form.cleaned_data.get('query') self.filter_query = Q() if query: words = [w for w in re.split(r'\s+',query) if w!=''] for word in words: self.filter_query = self.filter_query & (Q(name__icontains=word) | Q(metadata__icontains=word) ) items = items.filter(self.filter_query) # filter based on item type item_types = self.item_types = form.cleaned_data.get('item_types',[]) print(item_types) if 'exams' in item_types: if 'questions' not in item_types: items = items.filter(filter_exam) elif 'questions' in item_types: items = items.filter(filter_question) # filter based on author author_term = form.cleaned_data.get('author') if author_term: authors = find_users(author_term) self.filter_authors = Q(author__in=authors) items = items.filter(self.filter_authors) else: self.filter_authors = Q() # filter based on subject subjects = form.cleaned_data.get('subjects') if subjects and len(subjects): self.filter_subjects = Q(subjects__in=subjects) items = items.filter(self.filter_subjects) else: self.filter_subjects = Q() # filter based on topic topics = form.cleaned_data.get('topics') if topics and len(topics): self.filter_topics = Q(topics__in=topics) items = items.filter(self.filter_topics) else: self.filter_topics = Q() # filter based on usage usage = form.cleaned_data.get('usage') usage_filters = { "any": Q(), "reuse": Q(licence__can_reuse=True), "modify": Q(licence__can_reuse=True, licence__can_modify=True), "sell": Q(licence__can_reuse=True, licence__can_sell=True), "modify-sell": Q(licence__can_reuse=True, licence__can_modify=True, licence__can_sell=True), } if usage in usage_filters: self.filter_usage = usage_filters[usage] items = items.filter(self.filter_usage) else: self.filter_usage = Q() # filter based on ability level ability_levels = form.cleaned_data.get('ability_levels') if ability_levels.exists(): d = ability_levels.aggregate(Min('start'),Max('end')) start = d['start__min'] end = d['end__max'] self.filter_ability_level = Q(ability_level_start__lt=end,ability_level_end__gt=start) items = items.filter(self.filter_ability_level) else: self.filter_ability_level = Q() # filter based on status status = form.cleaned_data.get('status') if status and status!='any': self.filter_status = Q(current_stamp__status=status) items = items.filter(self.filter_status) else: self.filter_status = Q() items = items.distinct() return items