Насколько мне известно, у Django нет инструментов для добавления строк запросов в URL, но это само по себе не является проблемой, поскольку мы можем создать свою собственную функцию, например:
from django.urls import reverse
from django.http.response import HttpResponseRedirect
def redirect_qd(viewname, *args, qd=None, **kwargs):
rev = reverse(viewname, *args, **kwargs)
if qd:
rev = '{}?{}'.format(rev, qd.urlencode())
return HttpResponseRedirect(rev)
Кодирование значений важно. Представьте, что ваш group
имеет значение foo&bar=3
. Если вы не закодируете это должным образом, то это означает, что ваша строка запроса будет позже проанализирована как два параметра: group
и bar
с group
, равным foo
и bar
, являющимся 3
. Таким образом, это не то, что вы хотели. Использование urlencode
приведет к 'group=foo%26bar%3D3'
, что, таким образом, является предполагаемым значением.
и тогда мы можем использовать эту функцию как:
from django.http.request import QueryDict
def product_new(request):
group = request.GET.get('group')
if group == None:
product = Product.objects.create()
return redirect('cms:product_list_edit')
else:
product = Product.objects.create(group=group)
qd = QueryDict(mutable=True)
qd.update(group=group)
return <b>redirect_qd('cms:product_list_edit', qd=qd)</b>
Если вы просто хотите передать всю строку запроса, вы можете вызвать ее с помощью redirect_qd('myview', request.GET)
.