def index(self): query = self.get_query() ordering = request.args.get('ordering') or '' query = self.apply_ordering(query, ordering) # process the filters from the request filter_form, query, cleaned, field_tree = self.process_filters(query) # create a paginated query out of our filtered results pq = PaginatedQuery(query, self.paginate_by) if request.method == 'POST': id_list = request.form.getlist('id') if request.form['action'] == 'delete': return redirect( url_for(self.get_url_name('delete'), id=id_list)) else: return redirect( url_for(self.get_url_name('export'), id=id_list)) return render_template(self.templates['index'], model_admin=self, query=pq, ordering=ordering, filter_form=filter_form, field_tree=field_tree, active_filters=cleaned, **self.get_extra_context())
def index(self): query = self.get_query() ordering = request.args.get('ordering') or self.default_ordering query = self.apply_ordering(query, ordering) # create a QueryFilter object with our current query query_filter = self.get_query_filter(query) # process the filters from the request filtered_query = query_filter.get_filtered_query() # create a paginated query out of our filtered results pq = PaginatedQuery(filtered_query, self.paginate_by) if request.method == 'POST': id_list = request.form.getlist('id') if request.form['action'] == 'delete': return redirect( url_for(self.get_url_name('delete'), id=id_list)) else: return redirect( url_for(self.get_url_name('export'), id__in=id_list)) return render_template( 'admin/models/index.html', model_admin=self, query=pq, ordering=ordering, query_filter=query_filter, )
def ajax_list(self): field = request.args.get('field') prev_page = 0 next_page = 0 try: models = path_to_models(self.model, field) except AttributeError: data = [] else: rel_model = models.pop() rel_field = self.foreign_key_lookups[field] query = rel_model.select().where(**{ '%s__icontains'% rel_field: request.args.get('query', ''), }).order_by(rel_field) pq = PaginatedQuery(query, self.filter_paginate_by) current_page = pq.get_page() if current_page > 1: prev_page = current_page - 1 if current_page < pq.get_pages(): next_page = current_page + 1 data = [ {'id': obj.get_pk(), 'repr': unicode(obj)} \ for obj in pq.get_list() ] json_data = json.dumps({'prev_page': prev_page, 'next_page': next_page, 'object_list': data}) return Response(json_data, mimetype='application/json')
def paginated_object_list(self, filtered_query): paginate_by = self.get_paginate_by() pq = PaginatedQuery(filtered_query, paginate_by) meta_data = self.get_request_metadata(pq) query_dict = self.serialize_query(pq.get_list()) meta_data['data'] = query_dict return self.response(meta_data)
def ajax_list(self): field_name = request.args.get('field') prev_page = 0 next_page = 0 try: models = path_to_models(self.model, field_name) except AttributeError: data = [] else: field = self.model._meta.fields[field_name] rel_model = models.pop() rel_field = rel_model._meta.fields[ self.foreign_key_lookups[field_name]] query = rel_model.select().order_by(rel_field) query_string = request.args.get('query') if query_string: query = query.where(rel_field**('%%%s%%' % query_string)) pq = PaginatedQuery(query, self.filter_paginate_by) current_page = pq.get_page() if current_page > 1: prev_page = current_page - 1 if current_page < pq.get_pages(): next_page = current_page + 1 data = [] # if the field is nullable, include the "None" option at the top of the list if field.null: data.append({'id': '__None', 'repr': 'None'}) data.extend([{ 'id': obj._pk, 'repr': str(obj) } for obj in pq.get_list()]) json_data = json.dumps( { 'prev_page': prev_page, 'next_page': next_page, 'object_list': data }, cls=StringifyingEncoder) return Response(json_data, mimetype='application/json')
def paginated_object_list(self, filtered_query): try: paginate_by = int(request.args.get('limit', self.paginate_by)) except ValueError: paginate_by = self.paginate_by else: if self.paginate_by: paginate_by = min(paginate_by, self.paginate_by) # restrict pq = PaginatedQuery(filtered_query, paginate_by) meta_data = self.get_request_metadata(pq) query_dict = self.serialize_query(pq.get_list()) return self.response({ 'meta': meta_data, 'objects': query_dict, })
def index(self): if request.method == 'POST': id_list = request.form.getlist('id') action = request.form['action'] if action == 'delete': return redirect( url_for(self.get_url_name('delete'), id=id_list)) elif action == 'export': return redirect( url_for(self.get_url_name('export'), id=id_list)) elif action in self.action_map: id_list = request.form.getlist('id') if not id_list: flash('Please select one or more rows.', 'warning') else: action_obj = self.action_map[action] maybe_response = action_obj.callback(id_list) if isinstance(maybe_response, Response): return maybe_response else: flash('Unknown action: "%s".' % action, 'danger') return self._index_redirect() session['%s.index' % self.get_admin_name()] = request.url query = self.get_query() ordering = request.args.get('ordering') or '' query = self.apply_ordering(query, ordering) # process the filters from the request filter_form, query, cleaned, field_tree = self.process_filters(query) # create a paginated query out of our filtered results pq = PaginatedQuery(query, self.paginate_by) return render_template(self.templates['index'], model_admin=self, query=pq, ordering=ordering, filter_form=filter_form, field_tree=field_tree, active_filters=cleaned, **self.get_extra_context())
def _select(self, form, account, csv=False): select_result = Invoice_model.select().join(Shop).join(Account).where( Account.id == account.id) if form.get('shop_id'): select_result = select_result.where(Shop.id == form['shop_id']) if form.get('invoice_id'): select_result = select_result.where( Invoice_model.id == form['invoice_id']) if form.get('shop_invoice_id'): select_result = select_result.where( Invoice_model.shop_invoice_id == form['shop_invoice_id']) if form.getlist('paymethod') and form.getlist('paymethod')[0] != '': select_result = select_result.join( InvoicePayway, on=InvoicePayway.id == Invoice_model.payway).join( PayMethod).where(PayMethod.id << form.getlist('paymethod')) if form.getlist( 'shop_currency') and form.getlist('shop_currency')[0] != '': select_result = select_result.where( Invoice_model.shop_currency << form.getlist('shop_currency')) if form.getlist('status') and form.getlist('status')[0] != '': select_result = select_result.where( Invoice_model.status << form.getlist('status')) if form.getlist( 'ps_currency') and form.getlist('ps_currency')[0] != '': select_result = select_result.where( Invoice_model.ps_currency << form.getlist('ps_currency')) if form.get('created_from'): created_from = self._try_parse_datetime(form['created_from']) select_result = select_result.where( Invoice_model.created > created_from) if form.get('created_to'): created_to = self._try_parse_datetime(form["created_to"]) select_result = select_result.where( Invoice_model.created < created_to) if not csv: pages_count = PaginatedQuery( select_result.order_by( Invoice_model.id.desc()).limit(SELECT_LIMIT), RECORDS_PER_PAGE).get_pages() return Struct(invoices=[ Invoice(inv) for inv in PaginatedQuery( select_result.order_by(Invoice_model.id.desc()).limit( SELECT_LIMIT), RECORDS_PER_PAGE).get_list() ], pages_count=pages_count) return [ Invoice(inv) for inv in select_result.order_by( Invoice_model.id.desc()).limit(SELECT_LIMIT) ]