以下是我的简单观点:
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})
显示当前月份发生的交易清单。 我想添加一个选项来更改正在显示的事务的月份,但我不知道如何解决这个问题并让它工作。它应该在视图中完成吗?也许模板?我很感激任何想法
答案 0 :(得分:0)
花点时间阅读一些Django文档,因为它们可能证明非常有价值(更不用说它们非常干净并且为每个可用的版本编写得很好)。我会专注于Working With Forms
简而言之,您可以将django模板中的月份(可能通过ajax或简单的HTML表单POST)传递给您的视图,并使用视图函数获取POST数据并在查询集中使用它。 / p>
很难提供一个好的,彻底的答案,因为有不同的方法可以做到这一点。你想要AJAX吗?简单的表单与页面重新加载等?
好的,这里详细说明了我通常处理POST请求的方式。这不是经过测试的代码,它只是伪代码,但应该工作,尽管我可以告诉,除了一些小的错别字可能。但是,它应该让你知道如何在Django中处理ajax请求。
这非常简单,需要一些时间来阅读文档并通过一些早期的项目来涵盖这些概念,所以我深入研究对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
}
})
})