Как получить все значения многозначного ключа из запроса Django. GET QueryDict

Документы Django говорят http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems, что QueryDict.iteritems() использует ту же логику последнего значения, что и QueryDict.__getitem__(), что означает, что if ключ имеет более одного значения, __getitem__() возвращает последнее значение.

Скажем, print request.GET выглядит так:

<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>

Если я хочу получить строку типа sex=1&status=1&status=2&status=3&status=4 (стандартный материал HTTP GET), следующий код не даст желаемых результатов из-за описанного выше поведения iteritems:

mstring = []
for gk, gv in request.GET.iteritems():
    mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)

Каков наиболее эффективный способ получить результат, который я хочу без слишком большого цикла?

С уважением.

[EDIT]

Я должен упомянуть, что я не прибегаю к QueryDict.urlencode(), потому что в этом запросе есть несколько ключей. GET, которых я не хочу в строке. Я мог бы изменить строку и вывести этот ключ = значение, но просто интересно, есть ли лучший способ сделать это. Я понимаю, что эта информация должна быть явно упомянута.

Ответы

Ответ 1

Это должно работать:

mstring = []
for key in request.GET.iterkeys():  # "for key in request.GET" works too.
    # Add filtering logic here.
    valuelist = request.GET.getlist(key)
    mstring.extend(['%s=%s' % (key, val) for val in valuelist])
print '&'.join(mstring)

Ответ 2

request.META['QUERY_STRING']

даст полную строку запроса

или если вы хотите получить список значений для заданного ключа ex: список значений для статуса, затем

request.GET.getlist('status')

Ответ 3

Я считаю, что QueryDict.urlencode достигает желаемого результата, если все, что вы хотите сделать, это распечатать QueryDict, а затем просто

print request.GET.urlencode()

должен сделать трюк. Дайте мне знать, если вы пытаетесь сделать что-то еще, и я постараюсь помочь!

Ответ 4

request.GET.getlist('status')

Ответ 5

Это легко! Просто print(dict(request.GET))

Ответ 6

вы можете включить querydict в словарь

map(int,dict(request.GET)["status"])