Example #1
0
def autocomplete(request, app_name, class_name):
    results = []
    q = request.POST['q']
    qs = loads_qs_query(request.POST['qs[qs]'])
    search_fields = get_metadata(qs.model, 'search_fields', [])
    select_template = get_metadata(qs.model, 'select_template')
    select_display = get_metadata(qs.model, 'select_display')
    queryset = None
    if q:
        for i, search_field in enumerate(search_fields):
            if i == 0:
                queryset = qs.filter(**{'%s__icontains' % search_field: q})
            else:
                queryset = queryset | qs.filter(
                    **{'%s__icontains' % search_field: q})
        if queryset is None:
            raise ValueError('The class %s does not have any search field.' %
                             class_name)
    else:
        queryset = qs

    queryset = queryset.all(request.user)
    for obj in queryset[0:25]:
        html = (select_template or select_display) and render_to_string(
            select_template or 'select_template.html',
            dict(obj=obj, select_display=select_display)) or unicode(obj)
        results.append(dict(id=obj.id, text=unicode(obj), html=html))
    s = json.dumps(dict(q=q, results=results))

    return HttpResponse(s)
Example #2
0
def populate(request):
    items = []
    queryset = loads_qs_query(request.POST['queryset'])
    start_field = request.POST['start_field']
    end_field = request.POST['end_field']
    start = datetime.datetime.strptime(request.POST['start'], '%Y-%m-%d')
    end = datetime.datetime.strptime(request.POST['end'], '%Y-%m-%d')
    fstart = start.strftime('%d/%m/%Y')
    fend = start.strftime('%d/%m/%Y')
    action_names = request.POST['action_names'].split(',')

    request.session['calendar_initial_date'] = (
        start + datetime.timedelta(days=10)).strftime('%Y-%m-%d')
    request.session.save()

    filters = dict()
    filters['{}__gte'.format(start_field)] = start
    filters['{}__lte'.format(start_field)] = end
    queryset = queryset.filter(**filters)

    for obj in queryset.all():
        title = str(obj)
        start = getattr(obj, start_field)
        end = end_field and getattr(obj, end_field) or None
        if end:
            end = end + datetime.timedelta(days=1)
        icons = obj_icons(request, obj, css='popup')
        drop_down = ModelDropDown(request,
                                  obj.__class__,
                                  action_names=action_names)
        drop_down.add_actions(obj, inline=True)
        html_id = hash(obj)
        html = list()
        html.append('<div id="{}">'.format(html_id))
        html.append('<div class="pull-right">{}</div><br/><br/>'.format(icons))

        if end:
            html.append('<dl>')
            html.append('<dt>InĂ­cio</dt><dd>{}</dd>'.format(fstart))
            html.append('<dt>Fim</dt><dd>{}</dd>'.format(fend))
            html.append('</dl>')
        else:
            html.append('{}'.format(fstart))

        html.append('<hr/>')
        html.append(str(drop_down))
        html.append('</div>')
        html.append('<script>initialize("{}");</script>'.format(html_id))
        item = dict(id=html_id,
                    title=title,
                    start=str(start),
                    end=end and str(end) or None,
                    allDay=False,
                    url='javascript:',
                    html=''.join(html))
        items.append(item)

    return HttpResponse(json.dumps(items))