繁体   English   中英

Django过滤查询集

[英]Django filtering queryset

这是我的简单观点:

def transaction_list(request):
    current_user = request.user
    month = datetime.date.today().month

    try:
        page = request.GET.get('page', 1)
    except PageNotAnInteger:
        page = 1

    objects = Transaction.objects.filter(user=current_user, date__month=month)
    p = Paginator(objects, 10, request=request)
    transactions = p.page(page)
    return render(request, 'transaction/list.html',
                  {'transactions': transactions})

它显示了当月发生的交易列表。 我想添加一个选项来更改显示的交易月份,但是我不知道如何解决该问题并使其正常工作。 是否应该在视图中完成? 也许模板? 我将不胜感激

花一些时间阅读一些Django文档,因为它们可能真的很有价值(更不用说它们非常干净,并且对于每个可用版本都写得很好)。 我将专注于使用表单

简而言之,您将把月份从django模板(也许通过ajax或简单的HTML表单POST)传递到视图,并使用视图函数获取POST数据并将其用于查询集中。

很难提供一个好的,彻底的答案,因为有不同的方法可以做到这一点。 您要AJAX吗? 简单的页面重新加载形式,等等?


好的,这里是我通常如何处理POST请求的详细信息。 这不是经过测试的代码,它只是伪代码,但就我所知,它应该可以工作,除了一些小的错别字。 但是,它应该使您了解如何在Django中处理Ajax请求。

这是101岁,花一些时间阅读文档并运行一些早期项目涉及到这些概念,所以我的深入研究对SO读者并没有真正的价值。

views.py

class change_date_form(forms.Form):
    new_date = forms.DateField()

def change_transaction_date(request):
    #Do some checks to make sure user is authorized to do this
    current_user = ... 
    customer_data = []
    if request.method == 'POST':
       form = change_date_form(request.POST, request.FILES)
       if form.is_valid():
           change_date = form.cleaned_data.get('new_date')
           objects = Transaction.objects.filter(user=current_user, date__month=change_date)
           for i in objects:
               customer_data.append(objects.name)
    response_data = json.dumps(customer_data)
    return HttpResponse(response_data, content_type='application/json')

urls.py

...
url(r'^change_date_view/', 'module.views.change_transaction_date'),

jQuery的:

$('button_handler').on('click', function() { 
 var new_date_value = $(date_field_selector).val()
 $.ajax({ 
    url: "/change_date_view/",
    type: "POST",
    data: { 
       new_date: button_handler,
      },
    success:function(data) { 
      //build your html via javascript with response data
       }
 })

})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM