[英]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.