code_freak
code_freak

Reputation: 45

multiple parameter in get request in django

url.py

urlpatterns = [
    path('api_doc/', schema_view),
    path('admin/', admin.site.urls),
    # regex for swagger creation
    path(r'^request.GET.get(‘tag’)&request.GET.get(‘order_by’)', views.QuestionList.as_view()),
    # path(r'^?tag={tag}&order_by={name}', views.QuestionList.as_view()),
]

This is mu url.py file and i a trying to input "tag" and "order_by" in url in swagger but it's not working? i have tried above url options

In the last one "?" is not reconized by url.

Upvotes: 0

Views: 845

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476493

The query string [wiki] is not part of the path. So you can not capture or check this in the urlpatterns. Your path looks like:

path('', views.QuestionList.as_view())

In your view, you can then filter the queryset accordingly:

from django.views.generic.list import ListView
from app.models import Question

class QuestionList(ListView):
    model = Question

    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if 'tag' in self.request.GET:
            qs = qs.filter(tag__id=self.request.GET['tag'])
        if 'order_by' in self.request.GET:
            qs = qs.order_by(self.request.GET['order_by'])
        return qs

That being said, you are introducing a security vulnerability by allowing arbitrary ordening.

It furthermore might be worth to take a look at django-filter [GitHub] to do filtering based on a QueryDict in a more declarative way.

Upvotes: 1

Related Questions