2014-12-02 1 views
0

Я довольно новичок в классах, и у меня есть проблема.Django pagination after POST

Я реализовал get_queryset, чтобы вернуть всех моих пользователей (для тестирования), и они возвращаются, а разбиение на страницы работает отлично (вне get_queryset у меня есть поле «paginate_by»).

Затем пользователь может найти несколько конкретных пользователей с помощью POST и конца методы поста является:

return render(request, self.template_name, {'objects': some_users}) 

Он отлично работает, но нумерация страницы теряются. Что я делаю не так?

+0

Я думаю, что вопрос будет более ясным, если вы включили остальную часть своего взгляда. – Alasdair

ответ

1

пагинацию делается в paginate_queryset, названный get_context_data, названный post (что по умолчанию в subcall к get), так что вы можете так что-то вроде (при вас есть метод фильтрации, фильтры на основе почтовых данных):

def post(self, request, *args, **kwargs): 
    self.queryset = self.filter(self.get_queryset()) 
    return super(MyView, self).get(request, *args, **kwargs) 

родительский пост будет вызывать get_queryset, который возвращает отфильтрованные self.queryset, и отформатирует его при вызове get_context_data

, чтобы не отображать QuerySet на первом get,

def get(self, request, *args, **kwargs): 
    return self.self.response_class(
     request=self.request, 
     template=self.get_template_names()) 

нумерация страниц шаблона ссылка всегда должны размещать на представлении вместо стандартного получить так сохранить поиск входа в контексте и изменить шаблон для разбиения на страницы, с

def get_context_data(self, **kwargs): 
    context = super(MyView, self).get_context_data(**kwargs) 
    context['search_value'] = self.request.POST.get('search_name', None) 
    return context 

,

<form action="?page={{ page_obj.previous_page_number }}" method="post"> 
    {% csrf_token %} 
    <input type="hidden" value="{{ search_value }}" name="search_name"> 
    <button type="submit">&laquo;</button> 
</form> 

и на следующей ссылке:

<form action="?page={{ page_obj.next_page_number }}" method="post"> 
    {% csrf_token %} 
    <input type="hidden" value="{{ search_value }}" name="search_name"> 
    <button type="submit">&raquo;</button> 
</form> 
+0

Выглядит многообещающе. Я пробовал это и получил «супер» объект не имеет атрибута «пост». Я скопировал/вставлял ваши вещи и менял имя вида. Он расширяет ListView, не знаю, имеет ли это значение. – dnmh

+0

@ dnmh извините, что у меня было это неправильно, ListView наследует get from View и не имеет почтового метода! Я изменил ответ. – DRC

+1

Отлично, теперь все в порядке! :) Благодаря! – dnmh