2017-01-24 2 views
0

Вот мой простой вид:Джанго фильтрация 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}) 

Это показывает список сделок, произошедших в текущем месяце. Я хочу добавить опцию для изменения месяца отображаемых транзакций, но я не знаю, как решить эту проблему и заставить ее работать. Должно ли это быть сделано с точки зрения? возможно, шаблон? Буду признателен за любые идеи

+0

Единственное место, где вы можете сделать это с точки зрения, ее неясно, какова точная проблема у вас есть – Sayse

+0

@Sayse Я просто не знаю, как изменить месяц, по которому транзакции отфильтровываются и делают django show thi s в обработанном шаблоне – Teryuu

+0

Я отредактировал свой ответ, чтобы дать вам более подробную информацию о обработке django ajax. – rob

ответ

0

Потратьте некоторое время на ознакомление с документами Django, поскольку они могут оказаться действительно ценными (не говоря уже о том, что они очень чистые и хорошо написаны для каждой доступной версии). Я бы сосредоточился на Working With Forms

Короче говоря, вы пройдете месяц со своего шаблона django (возможно, через ajax или просто HTML-форму POST), к своему представлению и используйте функцию просмотра, чтобы получить данные POST и использовать что в вашем запросе.

Трудно дать хороший, тщательный ответ, потому что есть разные способы сделать это. Вы хотите AJAX? Простая форма с перезагрузкой страницы и т. Д.?

Хорошо, здесь, подробно, я обычно обрабатываю запрос POST. Это не проверенный код, это просто код psuedo, но должен работать, насколько я могу судить, кроме нескольких мелких опечаток, возможно. НО, это должно дать вам представление о том, как обрабатывать запросы ajax в Django.

Это довольно 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 
     } 
}) 

}) 
+0

Я хотел поставить две кнопки в списке - в предыдущем месяце и в следующем месяце, что изменило бы месяц. Я думаю, что AJAX - лучший способ сделать такие вещи? Или это проще сделать с помощью форм? – Teryuu

+0

Вы можете использовать формы независимо от того, является ли это POST AJAX или нет. Я бы сделал это с формами ajax и django, хотя это действительно зависит от того, хотите ли вы перезагрузить страницу или нет. – rob

+0

Страница может перезагрузиться, это не проблема для меня. Я создал простую форму, в которой вы помещаете номер месяца, и он фильтрует транзакции к этому месяцу, но я хочу только следующие и предыдущие кнопки, с полем, чтобы ввести число скрытых. Я могу сделать это с помощью виджета HiddenInput, но это потребует, чтобы у меня было поле автоинкремент в форме, и я не могу сделать эту работу – Teryuu

Смежные вопросы