HTTP-запросы поддерживают несколько значений, назначенных одному параметру (ключу).Вот почему люди могут использовать их и (иногда) использовать их.Именно поэтому Django представила структуру MultiValueDict
.
Деление на get()
и getlist()
выгодно, поскольку помогает избежать ошибок и упрощает код представления.Рассмотрим другие варианты поведения: все они требуют больше кода, чтобы сделать то же самое:
get()
всегда возвращающий список.
В большинстве случаев вы передаете только одно значение одной клавише, поэтому вам нужно будет добавить [0]
и указать значение по умолчанию в виде списка.
param = request.GET.get('param', ['default value',])[0]
get()
возврат одного значения или списка, в зависимости от количества значений.
Itявляется недостатком HTML-выбора с несколькими допустимыми параметрами.Люди могут выбрать ноль, одно или несколько значений.Это означает, что вам нужно преобразовать одно значение в список или в обратном направлении самостоятельно:
params = request.GET.get('params', [])
# Here you have absolutely no idea if this is a list or a single value
# But you will need only one of that types
# If you need list: ---------------------------------
if not isinstance(params, list):
params = [params,]
objs = TestModel.objects.filter(id__in=params).all()
# If you need single value: -------------------------
if isinstance(params, list):
params = params[0] # Error if params is empty list...
obj = TestModel.objects.get(id=params)
get()
всегда возвращая одно значение.Так как же вы обрабатываете несколько значений без getlist
в этом случае?
Итак, для ответа на ваш вопрос есть дополнительная ценность поведения get/getlist
.