Как переопределить GET в Django Detailview?
У меня есть FORMVIEW, который перенаправляет на DETAILVIEW, и он отлично работает. Проблема у меня возникает, когда я пытаюсь объединить Pagination с DetailView. Когда я пытаюсь использовать пагинацию, GET по сути перенаправляет меня на FORMVIEW. Я понимаю, почему он это делает... Я говорю ему об этом. Я пытаюсь понять, как я могу включить некоторую логику в мой переопределенный GET. Я пытался сделать self.GET_OBJECT.pk... чтобы посмотреть, смогу ли я определить, нахожусь ли я на текущей странице, а не на FORMVIEW, но это не сработало...
Вот мой подробный обзор....
def get_context_data(self, **kwargs):
context = super(SuggestionByNameDetailView, self).get_context_data(**kwargs)
attachments = SuggestionFiles.objects.filter(suggestion=self.object.pk).all()
comment_form = SuggestionCommentForm()
response_form = SuggestionCommentReplyForm()
activities= self.get_related_activities()
context['suggestion_comments'] = activities
context['page_obj'] = activities
context['attachments'] = attachments
context['comment_form'] = comment_form
context['response_form'] = response_form
return context
def get_related_activities(self):
queryset = self.object.suggestion_comments.all()
paginator = Paginator(queryset,5) #paginate_by
page = self.request.GET.get('page')
activities = paginator.get_page(page)
return activities
def get_object(self, queryset=None):
return get_object_or_404(Suggestion, id=self.request.GET.get("dropdown"))
def get(self, request, *args, **kwargs):
dropdown=self.request.GET.get("dropdown")
if dropdown is not None:
if Suggestion.objects.filter(Q(id=self.request.GET.get("dropdown"))).distinct():
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
else:
raise Http404
else:
messages.add_message(self.request, messages.INFO, 'Suggestion is required.')
return HttpResponseRedirect(reverse('Suggestions:suggestion_by_name'))
Как уже упоминалось, я пытался сделать что-то вроде... if DROPDOWN is NONE and pk = self.get_object().pk... чтобы попытаться определить, могу ли я просто обойти логику DROPDOWN в GET... но PK всегда присутствует... Я также пытался сделать что-то вроде self.request.GET.get('pk'), но это тоже не сработало.
Когда я нажимаю, чтобы сделать пагинацию, я перенаправляюсь обратно на FORMVIEW. Я пытаюсь избежать этого, когда я нахожусь на DETAILVIEW. Заранее спасибо за любые мысли о том, что я могу сделать, чтобы решить эту проблему.
После пары часов работы.... выяснилось, что....GET может быть проблемой... но вот способ ее решить..... "Консервированный" код django... для пагинации выглядит примерно так...
<a href="?page={{ page_obj.next_page_number }}" class="button77">Next</a>
В моем случае... мне просто нужно было уточнить свой URL... так что теперь он выглядит как....
<a href="/LevelSet/Suggestions/suggestion_by_name_detail/26a12149-62bf-48fe-8e7e-3a71231f7229/?dropdown={{dropdown}}&page={{ page_obj.next_page_number }}" class="button77">Next</a>
Дело закрыто. Во всяком случае, этот. :).